Android:仅检索带号码的联系人

时间:2013-01-26 22:12:33

标签: java android android-contacts

我目前有以下代码从地址簿中检索联系人:

Uri uri = ContactsContract.Contacts.CONTENT_URI;
    String[] projection = {
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME
    };
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
    Cursor cursor = getContentResolver().query(uri, projection, selection, null, sortOrder); 

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
            android.R.layout.simple_list_item_multiple_choice, 
            cursor, 
            new String[] {ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts._ID}, 
            new int[] { android.R.id.text1},0);
    getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    setListAdapter(adapter);

然而,这也会在我的Nexus 4上返回我的facbook联系人。我的选择是否有问题?

由于

2 个答案:

答案 0 :(得分:7)

您可以通过在投影和选择中添加ContactsContract.Contacts.HAS_PHONE_NUMBER来过滤查询结果,使其仅包含具有电话号码的联系人。

将第二个和第三个语句更改为如下所示:

String[] PROJECTION = { 
ContactsContract.Contacts._ID, 
ContactsContract.Contacts.DISPLAY_NAME, 
ContactsContract.Contacts.HAS_PHONE_NUMBER
};
String selection = "(" + ContactsContract.Contacts.IN_VISIBLE_GROUP + 
" = '1' AND (" + ContactsContract.Contacts.HAS_PHONE_NUMBER + " != 0 ))";

结果光标只包含带有电话号码的联系人。

答案 1 :(得分:-1)

如果认为这是正常行为,因为您的Facebook联系人基本上是......联系人,因此您的代码会检索它们。 我认为过滤这种方法的最佳方法是循环返回数据并删除没有数字的数据。