Android 联系人-如何区分SIM卡、手机和其他联系人?

Android 联系人-如何区分SIM卡、手机和其他联系人?,android,android-contacts,contactscontract,Android,Android Contacts,Contactscontract,我正在通过手机读取所有联系人,如下所示: Cursor cursor = MainApp.get().getContentResolver().query( ContactsContract.Data.CONTENT_URI, null, null, null, ContactsContract.D

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

Cursor cursor = MainApp.get().getContentResolver().query(
                    ContactsContract.Data.CONTENT_URI,
                    null,
                    null,
                    null,
                    ContactsContract.Data.CONTACT_ID + " ASC");
我从联系人中读取
contacts contract.Data.ACCOUNT\u TYPE\u和\u Data\u SET
contacts contract.raw contacts.ACCOUNT\u NAME
,并对其进行分析,因为我想区分手机、sim卡和任何其他联系人。。。但我只能看到这些值是非常特定于手机的

1)我目前只知道
联系人contract.Data.ACCOUNT\u TYPE\u和\u Data\u SET的以下值

  • 电话联系方式

    • com.sonyericsson.localcontacts(索尼Xperia S)
    • vnd.sec.contact.phone(三星Galaxy Alpha)
  • SIM卡联系人

    • com.sonyericsson.adn联系人(索尼Xperia S)
    • vnd.sec.contact.sim(三星Galaxy Alpha)
2)我目前只知道联系人contract.Data.ACCOUNT\u NAME的以下值:

  • 电话联系方式

    • 电话联系人
      (索尼Xperia S)
    • 空(三星Galaxy Alpha)
  • SIM卡联系人

    • SIM卡联系人
      (索尼Xperia S)
    • primary.sim.account\u name
      (三星Galaxy Alpha)
谷歌、WhatsApp、Viber联系人很容易识别,但如何在所有手机上(或至少在大多数手机上)找到联系人是电话联系人还是sim卡联系人

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

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

要从SIM卡获取联系人,请使用以下选项:

Uri simUri = Uri.parse("content://icc/adn");
    Cursor cursorSim    = this.getContentResolver().query(simUri, null, null,null, null);

     while (cursorSim.moveToNext()) {           
         listName.          add(cursorSim.getString(cursorSim.getColumnIndex("name")));
         listContactId.     add(cursorSim.getString(cursorSim.getColumnIndex("_id")));      
         listMobileNo.      add(cursorSim.getString(cursorSim.getColumnIndex("number")));
        }
姓名、_id、号码是SIM contacts表中的字段

和用于电话使用的联系人

   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);
Cursor Cursor=mContentResolver.query(
rawscontacts.CONTENT_URI,
新字符串[]{RawContacts.\u ID,RawContacts.ACCOUNT\u TYPE},
rawscontacts.ACCOUNT_TYPE+“'com.anddroid.contacts.sim'”
+“和”+rawscontacts.ACCOUNT_TYPE+“'com.google'//如果您不想同时搜索联系人
,
无效的
无效);

第二部分:SIM卡联系人似乎并不总是被命名为com.anddroid.contacts.SIM。我还必须排除谷歌等所有其他账户,如whatsapp、viber等(可能,但我不知道所有创建联系人的应用程序,每个开发人员都可以将联系人保存在手机中),是否可以在其账户类型字段中获取SIM卡和本地联系人的信息?