Android 通讯录 - 获取电话号码

Posted

技术标签:

【中文标题】Android 通讯录 - 获取电话号码【英文标题】:Android Contacts - Get Phone number 【发布时间】:2013-11-14 05:33:42 【问题描述】:

我正在尝试在 android 中获取联系人的所有电话号码。我的代码如下所示:

ContentResolver cr = context.getContentResolver();
String[] projection = new String[]  ContactsContract.CommonDataKinds.Phone.NUMBER ;
String selection = ContactsContract.Data.CONTACT_ID + "=" + contactId;
Cursor nameCur = cr.query(ContactsContract.Data.CONTENT_URI, projection, selection, null, null);
while (nameCur.moveToNext()) 
    String contact = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

原则上,它可以工作,但变量“contact”有时具有“null”、“1”、“4”或“phonenumber@whatsapp”等值。如果没有这些愚蠢的 WhatsApp Id 字符串,我怎么能真的只获取电话号码?

【问题讨论】:

【参考方案1】:

您还可以查看contact是什么:电话号码或其他内容:

public static boolean isPhoneNumberValid(CharSequence phone) 
    return !(TextUtils.isEmpty(phone)) && Patterns.PHONE.matcher(phone).matches();

【讨论】:

谢谢!我不允许投票赞成你的答案,但它真的帮助了我!【参考方案2】:

我使用以下代码及其工作,请参阅:

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

                cursor.moveToFirst();
                // data = new String[cursor.getCount()][12];
                if (cursor.getCount() > 0) 
                    do 
                        try 

                            contactId = cursor
                                    .getString(cursor
                                            .getColumnIndex(ContactsContract.Contacts._ID));



                            Uri contactUri = ContentUris.withAppendedId(
                                    Contacts.CONTENT_URI,
                                    Long.parseLong(contactId));
                            Uri dataUri = Uri.withAppendedPath(contactUri,
                                    Contacts.Data.CONTENT_DIRECTORY);

                            Cursor phones = getContentResolver()
                                    .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                            null,
                                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                                    + " = " + contactId,
                                            null, null);
                            if (phones.getCount() > 0) 
                                ContactClass info = new ContactClass();
                                info.setid(contactId);

                                try 
                                    Cursor nameCursor = getContentResolver()
                                            .query(dataUri,
                                                    null,
                                                    Data.MIMETYPE + "=?",
                                                    new String[]  StructuredName.CONTENT_ITEM_TYPE ,
                                                    null);
                                    nameCursor.moveToFirst();
                                    do 

                                        String firstName = nameCursor
                                                .getString(nameCursor
                                                        .getColumnIndex(Data.DATA2));

                                        String lastName = "";

                                        String displayname = cursor
                                                .getString(cursor
                                                        .getColumnIndex(Contacts.DISPLAY_NAME_ALTERNATIVE));
                                        if (!firstName.equals(displayname)) 
                                            lastName = nameCursor
                                                    .getString(nameCursor
                                                            .getColumnIndex(Data.DATA3));
                                        

                                        if (firstName.equals(null)
                                                && lastName.equals(null)) 
                                            info.setfirstname("unknown name");
                                         else if (firstName.equals(null)) 
                                            info.setlastname(lastName);
                                         else if (lastName.equals(null)) 
                                            info.setfirstname(firstName);
                                         else 
                                            info.setfirstname(firstName);
                                            info.setlastname(lastName);
                                        

                                     while (nameCursor.moveToNext());
                                    nameCursor.close();



                                 catch (Exception e) 

                                
                            
                            phones.close();
                        

                        catch (Exception t) 

                        

                     while (cursor.moveToNext());
                    cursor.close();

【讨论】:

以上是关于Android 通讯录 - 获取电话号码的主要内容,如果未能解决你的问题,请参考以下文章

Android 内容提供程序。如何通过通讯录中的一个请求获取所有数据

Android获取手机联系人的姓名和电话

安卓。通过电话号码从通讯录中检索名字和姓氏

Android 通讯录存入手机电话邮箱地址等信息

Android 通讯录存入手机电话邮箱地址等信息

Android编程,根据姓名获得手机通讯录中的电话号码