我正在通过手机阅读所有联系人,如下所示:
Cursor cursor = MainApp.get().getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
null,
null,
null,
ContactsContract.Data.CONTACT_ID + " ASC");
我从联系人那里读了ContactsContract.Data.ACCOUNT_TYPE_AND_DATA_SET
和ContactsContract.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)
com.sonyericsson.adncontacts (Sony Xperia S)
vnd.sec.contact.sim (Samsung Galaxy Alpha)
2)我目前只知道ContactsContract.Data.ACCOUNT_NAME
的以下值:
Phone contacts
(索尼Xperia S)
EMPTY(三星Galaxy Alpha)SIM contacts
(索尼Xperia S)
primary.sim.account_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")));
}
name,_id,number是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);