首页 文章

Android通讯录 - 获取电话号码

提问于
浏览
1

我正在尝试获取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字符串,我怎么才真正得到电话号码?

2 回答

  • 1

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

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

    我使用下面的代码及其工作,请看:

    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();
    

相关问题