如何在Android中获取所有联系人并忽略仅电子邮件联系人



下面是我用来在Android中获取联系人的代码。

String[] projectionFields = new String[]{
                ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME,
        };
CursorLoader cursorLoader = new CursorLoader(context,
                ContactsContract.Contacts.CONTENT_URI,
                projectionFields, // the columns to retrieve
                SELECTION, // the selection criteria (none)
                null, // the selection args (none)
                null // the sort order (default)
        );
Cursor cursor = cursorLoader.loadInBackground();
if (cursor.moveToFirst()) {
            int nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
            do {
                String contactDisplayName = cursor.getString(nameIndex);
            } while (cursor.moveToNext());
        }

我也收到了很多只有电子邮件的联系人。我不想显示仅电子邮件联系人。我该怎么做?

我从您的问题中了解到您需要获取具有电话号码的联系人。如果是这种情况,您可以通过以下方式检查联系人是否有电话号码

ContentResolver contentResolver = getContentResolver();
    ContentProviderClient mCProviderClient = contentResolver.acquireContentProviderClient(ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
    Cursor cursor = mCProviderClient.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, null, null, "UPPER(" + ContactsContract.Contacts.DISPLAY_NAME + ") ASC");
    if (cursor.getCount() > 0) {
        while (cursor.moveToNext()) {
            String contactId =
                    cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
            String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
            if (hasPhoneNumber > 0) {
                Cursor phones = mCProviderClient.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION_PHONE,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
                while (phones.moveToNext()) {
                    String number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                }
                phones.close();
             }
        }
        mCProviderClient.close();
        cursor.close();
    }

如果为联系人分配了电话号码,则 hasPhoneNumber 的值将为> 0。

请参考此答案,它将只允许数字,并且还将删除重复项。

希望对您有所帮助,并且您的问题得到解决。

谢谢。

最新更新