2

我目前有以下代码从通讯录中检索联系人:

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 联系人。我的选择有问题吗?

谢谢

4

2 回答 2

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

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

于 2013-01-26T22:36:42.787 回答
-1

如果认为这是正常行为,因为您的 Facebook 联系人基本上是……联系人,所以它们会被您的代码检索。我认为最好的过滤方法是遍历返回的数据并删除没有数字的数据。

于 2013-01-26T22:15:48.080 回答