Android通讯录 - 获取电话号码

时间:2013-11-03 13:32:53

标签: java android android-contacts phone-number

我正在尝试获取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 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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();