如何仅显示电话联系人(不包括 SIM 联系人)

Posted

技术标签:

【中文标题】如何仅显示电话联系人(不包括 SIM 联系人)【英文标题】:How to display phone contacts only (exclude SIM contacts) 【发布时间】:2013-05-15 03:13:34 【问题描述】:

我正在构建一个 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..

【问题讨论】:

没有人吗?那么这很复杂吗? 【参考方案1】:

想通了:

基本上你需要的是:

Uri queryUri = ContactsContract.Contacts.CONTENT_URI;

这将遵循用户的通讯录设置 - 如果用户禁用显示 SIM 联系人,查询结果将自动排除 SIM 联系人。

希望这对其他人有所帮助。

【讨论】:

以上是关于如何仅显示电话联系人(不包括 SIM 联系人)的主要内容,如果未能解决你的问题,请参考以下文章

Sim 联系人不会显示

如何仅在使用联系人选择器存在电话号码时显示

如何从 Android 设备中仅获取电话号码联系人

联系人列表仅使用意图 ContactsContract 显示一个电话号码

如何仅使用他们的电话号码获取联系人姓名?

在列表视图中获取所有联系人(来自 Phone 和 sim )