【问题标题】:Only get android contacts that are saved to the phone or sim仅获取保存到手机或 SIM 卡中的 android 联系人
【发布时间】:2014-06-23 19:10:39
【问题描述】:

我正在尝试在 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 进行查询,但没有成功。如何修改上面的代码块来实现我需要的?

【问题讨论】:

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


    【解决方案1】:

    联系人是否出现在常规联系人中由以下属性决定:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多