如何仅显示手机通讯录(不包括SIM卡通讯录)

时间:2013-05-20 14:21:19

标签: android contactscontract android-cursorloader rawcontacts

我正在建立一个用户界面,我需要在列表视图中显示手机通讯录列表。

我正在使用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..

1 个答案:

答案 0 :(得分:1)

想出来:

基本上你需要的是:

Uri queryUri = ContactsContract.Contacts.CONTENT_URI;

这将遵循用户的地址簿设置 - 如果用户已禁用显示SIM卡联系人,则查询结果将自动排除SIM卡联系人。

希望这有助于其他人。