2015-05-27 3 views
1

Я читаю все контакты из телефона, как следующее:Контакты - как различать SIM-карту, телефон и другие контакты?

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 от контактов и анализировал их, потому что я хочу, чтобы различать телефон, сим и любой другой контакт ... Но я только видно, что значения очень специфичны для телефона.

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 (Samsung Galaxy альфа)
  • SIM контакты

    • SIM contacts (Sony Xperia S)
    • primary.sim.account_name (Samsung Galaxy Альфа)

Google, WhatsApp, контакты Viber легко распознаются, но как узнать его контакт - это телефонный контакт или сим-контакт на всех телефонах (или, по крайней мере, на большинстве)?

Я не хочу отображать «vnd.sec.contact.sim» для сим-контактов, но вместо этого вы хотите отобразить «SIM».

Кто-нибудь знает другие строки для моего списка? Или кто-нибудь знает лучшее решение?

ответ

1

Чтобы получить контакты из 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

И для контактов с использованием телефона

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); 
+0

Для второго part: контакты SIM-карты не всегда называются 'com.anddroid.contacts.sim'. И мне пришлось бы исключать все другие учетные записи, такие как google, например whatsapp, viber и т. Д. (Возможно, но я не знаю, все приложения, которые создают контакты, и каждый разработчик может сохранять свои контакты в телефоне) – prom85

+0

можно узнать, как должны иметь место SIM-карты и локальные контакты в поле ACCOUNT_TYPE? –