我正在尝试检索明确保存的Android设备上的联系人(即不是gmail或Facebook返回的联系人以及保存类似联系信息的其他应用程序)。我一直在使用PhoneGap联系人插件中的代码块:
Cursor idCursor = mApp.getActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI,
new String[] { ContactsContract.Data.CONTACT_ID },
whereOptions.getWhere(),
whereOptions.getWhereArgs(),
ContactsContract.Data.CONTACT_ID + " ASC");
我修改了各种参数并尝试了基于ContactsContract.RawContacts.ACCOUNT_TYPE
的查询而没有运气。如何修改上面的代码块以实现我的需求?
答案 0 :(得分:0)
联系人是否出现在常规联系人中由以下属性决定:
ContactsContract.Contacts.IN_VISIBLE_GROUP
我修改了其中一个查询以解决此问题,并删除了不是真正联系人返回的联系人(例如gmail历史记录,等等):
options.setWhere("(" + ContactsContract.Contacts.IN_VISIBLE_GROUP + " = 1 AND " + ContactsContract.Data.CONTACT_ID + " LIKE ? )");
原始问题中的查询(来自cordova contacts插件)只是获取与提供的搜索词匹配的ID,要修改的查询是稍后在插件代码中的查询(更准确地说是相应的getWhere()
函数已修改为帐户IN_VISIBLE_GROUP
属性):
Cursor c = mApp.getActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI,
columnsToFetch.toArray(new String[] {}),
idOptions.getWhere(),
idOptions.getWhereArgs(),
ContactsContract.Data.CONTACT_ID + " ASC");
我在my github上托管了该插件的修改版本。请注意,我的版本仅适用于没有搜索词的情况。