使用ContactsContract.CommonDataKinds.Phone

时间:2017-01-13 12:10:35

标签: android contacts

以下是我用于从手机获取所有联系人的代码。

     public static ArrayList<Recipient> getAllRecipient(Context context) {

        ArrayList<Recipient> contacts = new ArrayList<>();
        Cursor cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

        if (cursor != null) {
            try {
                final int displayNameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
                final int numberIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                final int typeIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
                final int uriIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI);

                String displayName, number, uri;
                while (cursor.moveToNext()) {

                    int type = cursor.getInt(typeIndex);
                    if (type == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) {
                        displayName = cursor.getString(displayNameIndex);
                        number = cursor.getString(numberIndex);
                        number = number.replaceAll("[^0-9+]+", "");//remove all special character and space, just keep digit number and "+"
                        uri = cursor.getString(uriIndex);
                        Recipient recipient = new Recipient(displayName, number, uri);
                        contacts.add(recipient);
                    }
                }
            } catch (Exception e) {
                LogUtil.debug("can't get recipient: " + e.getMessage());
            } finally {
                cursor.close();
            }
        }
        cursor.close();
        return contacts;
    }

我收到很多用户的反馈,他们无法在手机中获得完整的联系人,显示几乎是联系人,但却错过了一些联系人。

以上代码有问题吗?感谢。

2 个答案:

答案 0 :(得分:0)

使用此代码

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext())
{


String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));


String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

}
phones.close();

答案 1 :(得分:0)

Phone.CONTENT_URI包括设备的所有电话条目。如果联系人没有手机,您将无法获得任何相关信息。 如果您正在使用联系人,则应查询ContactsContract.Contacts.CONTENT_URI

请注意,联系人和手机是Android的两个独立内容。并非所有联系人都有电话号码,您必须单独查询这些号码。