2

我正在构建一个 UI,我需要在列表视图中显示电话联系人列表。

我正在使用 ContactsContract.DataCursorLoader来加载数据,然后将光标绑定到自定义适配器(从 扩展SimpleCursorAdapter)。

这里的问题是我不知道如何过滤掉 SIM 卡联系人;我的测试手机在手机和 SIM 上都有相同的联系人,这会导致列表视图有重复的条目。如果我移除 SIM 卡,重复项就会消失。

如何使此过滤器过滤掉 SIM 卡联系人?我正在寻找一种使用 1 查询获取数据的方法。

这就是我目前加载数据的方式:

Uri queryUri = ContactsContract.Data.CONTENT_URI;

String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Data.MIMETYPE,
        ContactsContract.RawContacts.ACCOUNT_TYPE };

selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = 1  AND IS_PRIMARY = 1 AND MIMETYPE = '" + Phone.CONTENT_ITEM_TYPE + "'";


cursorLoader = new CursorLoader(getActivity(), queryUri, projection, selection, null, ContactsContract.Contacts.DISPLAY_NAME);

cursor = cursorLoader.loadInBackground();

//setup adapter, bind to listview etc..
4

1 回答 1

1

Figured it out:

Basically what you need is:

Uri queryUri = ContactsContract.Contacts.CONTENT_URI;

This would obey the user's address book setting - if the user has disabled showing SIM contacts, the query results would automatically exclude SIM contacts.

Hope this helps someone else.

于 2013-08-18T02:37:57.847 回答