联系人 - 如何区分SIM,手机和其他联系人?

时间:2015-05-27 09:56:06

标签: android android-contacts contactscontract

我正在通过手机阅读所有联系人,如下所示:

Cursor cursor = MainApp.get().getContentResolver().query(
                    ContactsContract.Data.CONTENT_URI,
                    null,
                    null,
                    null,
                    ContactsContract.Data.CONTACT_ID + " ASC");

我从联系人那里阅读了ContactsContract.Data.ACCOUNT_TYPE_AND_DATA_SETContactsContract.RawContacts.ACCOUNT_NAME并对其进行了分析,因为我想区分手机,SIM卡和任何其他联系人...但我只能看到这些值非常符合手机

1)我目前只知道ContactsContract.Data.ACCOUNT_TYPE_AND_DATA_SET的以下值:

  • 手机通讯录

    • com.sonyericsson.localcontacts (Sony Xperia S)
    • vnd.sec.contact.phone (Samsung Galaxy Alpha)
  • SIM卡联系人

    • com.sonyericsson.adncontacts (Sony Xperia S)
    • vnd.sec.contact.sim (Samsung Galaxy Alpha)

2)我目前只知道ContactsContract.Data.ACCOUNT_NAME的以下值:

  • 手机通讯录

    • Phone contacts(Sony Xperia S)
    • EMPTY(三星Galaxy Alpha)
  • SIM卡联系人

    • SIM contacts(Sony Xperia S)
    • primary.sim.account_name(三星Galaxy Alpha)

谷歌,WhatsApp,Viber联系人很容易识别,但如何找到联系人是所有手机上的手机联系人或SIM卡联系人(或至少在大多数情况下)?

我不想为SIM卡联系人显示“vnd.sec.contact.sim”,而是想显示“SIM”。

有没有人知道我的列表中的其他字符串? 或者有人知道更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

要从SIM获取联系人,请使用此选项:

   Cursor cursor = mContentResolver.query(
   RawContacts.CONTENT_URI,
   new String[]{RawContacts._ID,RawContacts.ACCOUNT_TYPE},
   RawContacts.ACCOUNT_TYPE + " <> 'com.anddroid.contacts.sim' "
    + " AND " + RawContacts.ACCOUNT_TYPE + " <> 'com.google' " //if you don't want to google contacts also
   ,
   null,
   null);

name,_id,number是SIM联系人表中的字段

对于来自手机的联系人

span