如何只获取联系人的手机号码

Posted

技术标签:

【中文标题】如何只获取联系人的手机号码【英文标题】:How get only mobile numbers in contact 【发布时间】:2016-12-15 10:07:04 【问题描述】:

我有以下代码来获取联系人姓名和电话号码。如何只获取联系人中的手机号码和姓名?联系人中的姓名可能有几个数字。如何获取姓名的手机号码?

 ContentResolver cr = activity.getContentResolver();
 Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
 while (phones.moveToNext()) 
    name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
    phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
 

【问题讨论】:

使用github.com/googlei18n/libphonenumber这个库来验证电话号码是否有效。 【参考方案1】:

尝试使用此代码。为我工作。

private static final String[] PROJECTION =
        
                Contacts._ID,
                Contacts.LOOKUP_KEY,
                Contacts.HAS_PHONE_NUMBER,
                Build.VERSION.SDK_INT
                        >= Build.VERSION_CODES.HONEYCOMB ?
                        Contacts.DISPLAY_NAME_PRIMARY :
                        Contacts.DISPLAY_NAME

        ;
private static final String[] PROJECTION_PHONE =
        
                Phone.NUMBER
        ;
private static final String SELECTION_PHONE = Phone.LOOKUP_KEY + " = ?";

HashMap<String, ArrayList<String>> contacts = new HashMap<>();

    ContentResolver cr = context.getContentResolver();
    Cursor cur = cr.query(Contacts.CONTENT_URI,
            PROJECTION, null, null, null); //get contacts
    if (cur.getCount() > 0) 
        while (cur.moveToNext()) 
            String id = cur.getString(
                    cur.getColumnIndex(Contacts._ID));
            String name = cur.getString(
                    cur.getColumnIndex(Build.VERSION.SDK_INT
                            >= Build.VERSION_CODES.HONEYCOMB ?
                            Contacts.DISPLAY_NAME_PRIMARY :
                            Contacts.DISPLAY_NAME));
            String lookUpKey = cur.getString(cur.getColumnIndex(Contacts.LOOKUP_KEY));
            if (Integer.parseInt(cur.getString(cur.getColumnIndex(Contacts.HAS_PHONE_NUMBER))) > 0)  //check if has numbers
                Cursor pCur = cr.query(Phone.CONTENT_URI, PROJECTION_PHONE, SELECTION_PHONE,
                        new String[]lookUpKey, null); //get contacts phone numbers
                ArrayList<String> phones = new ArrayList<>();
                while (pCur.moveToNext()) 
                    String phone = pCur.getString(0);
                    phones.add(phone);
                
                contacts.put(name, phones);
                pCur.close();
            
        
    
    cur.close();

【讨论】:

【参考方案2】:

您可以查询ContactsContract.CommonDataKinds.Phone.TYPE 列来确定号码的类型:

int type = phones.getInt(phones.
    getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));

if(type == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) 
    phoneNumber = phones.getString(phones.
        getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

【讨论】:

【参考方案3】:
 ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
            null, null, null);
    if (cur.getCount() > 0) 
        while (cur.moveToNext()) 
            String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                       if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
            
                // Query phone here. Covered next
                Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,null, null); 
                while (phones.moveToNext())  
                         String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                         Log.i("Number", phoneNumber);
                         
                phones.close(); 
            

        
    

您必须申请此权限:

使用权限 android:name="android.permission.READ_CONTACTS"

【讨论】:

以上是关于如何只获取联系人的手机号码的主要内容,如果未能解决你的问题,请参考以下文章

如何从联系人中获取电子邮件和姓氏?

如何获取所有联系人的号码?我做错了啥?

从联系人选择器中获取号码

如何从android中的联系人姓名获取联系人的号码

如何从 android 手机中获取已删除的联系人以及如何恢复它

在 Android 上通过电话号码获取联系人