2017-07-22 2 views
0

Actuellement, j'utilise la classe API de SubscriptionManager pour détecter si SIM est présent/absent. Dans un seul téléphone sim ci-dessous méthode travaillé pour lire le contact de la carte SIM.Lecture individuelle des contacts de chaque carte sim dans un téléphone dual sim

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

mon application est une application système et possède un périphérique enraciné. Pour Dual SIM téléphone comment lire les contacts de chaque carte SIM individuellement.

Si quelqu'un peut penser à d'autres moyens, ils sont les bienvenus. J'apprécierais vraiment toute sorte d'aide à ce sujet.

Répondre

0

Vous pouvez utiliser le champ ACCOUNT_TYPE de l'API ContactsContract pour rechercher des contacts SIM.

Vous devez interroger la table RawContacts pour obtenir une liste de tous les RawContacts stockés sur la carte SIM et obtenir les ID de contact de cette liste.

String selection = RawContacts.ACCOUNT_TYPE + "='vnd.sec.contact.sim'"; 
Cursor cur = mContentResolver.query(RawContacts.CONTENT_URI, null, selection, null, null); 
// cur should now contain all the requested contacts 
DatabaseUtils.dumpCursor(cur); 

MISE À JOUR

Depuis cela ne fonctionne pas, cela signifie que les valeurs enregistrées pour la ACCOUNT_TYPE ne sont pas comme prévu, peut-être quelque chose comme vnd.sec.contact.sim1 et vnd.sec.contact.sim2.

Vous pouvez créer une méthode de test pour imprimer toutes les valeurs de ACCOUNT_TYPE s à partir de tous les contacts et utiliser cette sortie pour déterminer les valeurs correctes dont vous avez besoin.

HashSet<String> accountTypes = new HashSet<String>(); 
String[] projection = new String[] { RawContacts.ACCOUNT_TYPE }; 
Cursor cur = mContentResolver.query(RawContacts.CONTENT_URI, projection, null, null, null); 
if (cur != null) { 
    while (cur.moveToNext()) { 
     accountTypes.add(cur.getString(0)); 
    } 
} 
for (String type : accountTypes) { 
    Log.d("ACCOUNT_TYPE", type); 
} 
// Check the output in LogCat and look for `ACCOUNT_TYPE`s that look like `sim` types. then add those values to the selection of the above method 
+0

Je reçois suivante exception android.database.sqlite.SQLiteException: près "": erreur de syntaxe (code 1):, lors de la compilation: SELECT sort_key, send_to_voicemail, épinglé, sec_custom_alert, display_name, display_name_alt AS phonetic_name_style DE view_raw_contacts_restricted WHERE (1) AND ((account_type = vnd.sec.contact.sim)) – Pause

+0

ouais, il me manquait une apostrophe autour de la valeur de sélection, corrigé maintenant – marmor

+0

J'ai essayé votre solution mais pas de chance. sélection = ACCOUNT_TYPE = 'vnd.sec.contact.sim' cur = [email protected] I/System.out: >>>>> dumping curseur [email protected]~~V~~singular~~3rd I/System.out: <<<<< – Pause