只获取保存到手机或SIM卡的Android联系人

时间:2014-06-23 19:10:39

标签: java android cordova android-contacts cordova-plugins

我正在尝试检索明确保存的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的查询而没有运气。如何修改上面的代码块以实现我的需求?

1 个答案:

答案 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上托管了该插件的修改版本。请注意,我的版本仅适用于没有搜索词的情况。