我怎样才能从android电话簿中获得所有手机号码?

我怎样才能从android电话簿中获得所有手机号码?,android,sqlite,Android,Sqlite,这是我的代码,它给了我安卓设备的所有号码,比如手机号码、whatsapp号码和固定电话号码。但我只想把安卓电话簿中的手机号码和固定电话号码输入我的应用程序。我如何才能只获得每个联系人姓名的手机号码和固定电话号码 private void addContactsInList() { // TODO Auto-generated method stub Cursor cursor = getContentResolver().query( ContactsC

这是我的代码,它给了我安卓设备的所有号码,比如手机号码、whatsapp号码和固定电话号码。但我只想把安卓电话簿中的手机号码和固定电话号码输入我的应用程序。我如何才能只获得每个联系人姓名的手机号码和固定电话号码

private void addContactsInList() {
    // TODO Auto-generated method stub

    Cursor cursor = getContentResolver().query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            null, null, null, null);

    try {
        ContactsListClass.phoneList.clear();
    } catch (Exception e) {

    }

    while (cursor.moveToNext()) {
        String phoneName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        int phoneId = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));


        Contact cp = new Contact();

        cp.setName(phoneName);
        cp.setNumber(phoneNumber);
        cp.setId(phoneId);


        ContactsListClass.phoneList.add(cp);
       // Log.e("add to list", "content" + phoneId +phoneName +phoneNumber);
    }
    cursor.close();

    lv = new ListView(context);

    lv.setLayoutParams(new LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT));


    llContainer.addView(lv);

    Collections.sort(ContactsListClass.phoneList, new Comparator<Contact>() {
        @Override
        public int compare(Contact lhs,
                           Contact rhs) {
            return lhs.getName().compareTo(
                    rhs.getName());
        }
    });

    contactAdapter = new ContactsAdapter(MainActivity.this,
            ContactsListClass.phoneList);
    lv.setAdapter(contactAdapter);
private void addContactsInList(){
//TODO自动生成的方法存根
Cursor Cursor=getContentResolver().query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,
空,空,空,空);
试一试{
ContactsListClass.phoneList.clear();
}捕获(例外e){
}
while(cursor.moveToNext()){
String phoneName=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.DISPLAY_NAME));
String phoneNumber=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
int phoneId=cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.CONTACT_ID));
触点cp=新触点();
cp.setName(phoneName);
cp.setNumber(电话号码);
cp.setId(phoneId);
ContactsListClass.phoneList.add(cp);
//Log.e(“添加到列表”、“内容”+phoneId+phoneName+phoneNumber);
}
cursor.close();
lv=新列表视图(上下文);
lv.setLayoutParams(新的LayoutParams(
LayoutParams.MATCH_父级,
LayoutParams.MATCH_PARENT));
llContainer.addView(lv);
Collections.sort(ContactsListClass.phoneList,新的Comparator(){
@凌驾
公共int比较(联系lhs,
联络(右){
返回lhs.getName().compareTo(
getName());
}
});
contactAdapter=新的ContactsAdapter(MainActivity.this,
ContactsListClass.phoneList);
低压设置适配器(接触适配器);

在while循环中,放置如下内容:

    while (phoneCursor.moveToNext()) {
                phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER));
                //String number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                int type = phoneCursor.getInt(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                switch (type) {
                    case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
                        // do something with the Home number here...
                        break;
                    case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
                        output.append("\n Phone number:" + phoneNumber);
                        break;
                    case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
                        // do something with the Work number here...
                        break;
                }
            }
如答案所示,试试这个

Cursor cursor = null;
            ArrayList<String> numberList=new ArrayList<String>();
            try {
                cursor = context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
                int contactIdIdx = cursor.getColumnIndex(Phone._ID);
                int nameIdx = cursor.getColumnIndex(Phone.DISPLAY_NAME);
                int phoneNumberIdx = cursor.getColumnIndex(Phone.NUMBER);
                int photoIdIdx = cursor.getColumnIndex(Phone.PHOTO_ID);
                cursor.moveToFirst();
                do {
                    String phoneNumber = cursor.getString(phoneNumberIdx);
                    numberList.add(phoneNumber);
                } while (cursor.moveToNext());  
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (cursor != null) {
                    cursor.close();
                }
            }
    }
Cursor=null;
ArrayList numberList=新的ArrayList();
试一试{
cursor=context.getContentResolver().query(Phone.CONTENT\u URI,null,null,null);
int contactIdIdx=cursor.getColumnIndex(电话号码);
int nameIdx=cursor.getColumnIndex(Phone.DISPLAY\u NAME);
int phoneNumberIdx=cursor.getColumnIndex(Phone.NUMBER);
int photoidix=cursor.getColumnIndex(Phone.PHOTO_ID);
cursor.moveToFirst();
做{
String phoneNumber=cursor.getString(phoneNumberIdx);
numberList.add(电话号码);
}while(cursor.moveToNext());
}捕获(例外e){
e、 printStackTrace();
}最后{
如果(光标!=null){
cursor.close();
}
}
}

可能重复@Brennayoung,如何在我的代码中获得三种类型的contect no,你能帮我吗?请参阅
contacts contract.commondatatypes.Phone.TYPE
column@pskink,String phoneNumber=cursor.getString(cursor.getColumnIndex(String.valueOf(contacts contract.commondatatypes.Phone.TYPE_MOBILE))这给了我一个错误列名是
ContactsContract.commondatatypes.Phone.TYPE
not
ContactsContract.CommonDat‌aKinds.Phone.TYPE_MOBILE
如果您对此答案感到满意,请接受并投票。这将对我有所帮助
   Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, personId);
   Uri phonesUri = Uri.withAppendedPath(personUri,                   People.Phones.CONTENT_DIRECTORY);
   String[] proj = new String[] {Phones._ID, Phones.TYPE, Phones.NUMBER, Phones.LABEL}
        Cursor cursor = contentResolver.query(phonesUri, proj, null, null, null);
    if(cursor != null && cursor.moveToFirst()){
    do{
    String number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    int type = phoneCursor.getInt(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                    switch (type) {

                        case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
                        break;   
                    }
    }while(cursor.moveToNext());
    }