L'obtention d'identification de Contact à partir d'Android Contacts de la base de données ne fonctionne pas comme prévu
J'ai le code suivant.
int phoneContactID = new Random().nextInt();
Cursor contactLookupCursor = context.getContentResolver().query( Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(contactNumber)), new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID},null,null,null);
try
{
contactLookupCursor.moveToFirst();
while(contactLookupCursor.moveToNext())
{
phoneContactID = contactLookupCursor.getInt(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup._ID));
}
}
finally
{
contactLookupCursor.close();
}
Le problème dans le code ci-dessus, c'est que même si je donne un numéro existant dans l'émulateur contacts, ce n'est pas le retour des résultats. J'ai été le tester une heure de retour et ça marchait très bien, et maintenant quand je l'ai testé à nouveau, ce n'est pas de retourner quoi que ce soit. Je ne suis pas sûr si quelque chose est incorrect avec le code. Ce que j'essaie de faire est d'obtenir un ID qui correspond à un seul avec plusieurs numéros. Par exemple, dire qu'il y a un nom de contact appelé "a" et d'Une a deux chiffres. Essentiellement le contact ID pour Un devrait être de 1 quel que soit le nombre de qui je me réfère à l'. Est mon hypothèse est correcte ?
Mise à JOUR : j'ai fait des tests un peu plus. Disons que si un nombre est stocké sans le code pays dans la base de données de contacts comme 222-222-2222. Une recherche à l'aide du code ci-dessous renvoie contact id seulement quand je passe la 2222222222 ou 222-222-2222. Et si le même numéro est stocké comme 12222222222 un contact valide id est reçu que si j'nombre de recherche est 12222222222.
String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone._ID,ContactsContract.CommonDataKinds.Phone.CONTACT_ID};
Uri contactUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(contactNumber));
Cursor c = context.getContentResolver().query(contactUri, projection, null, null, null);
if (c.moveToFirst()) {
phoneContactID = c.getInt(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
}
Je ne suis pas sûr si je fais quelque chose de mal ici. Toute aide serait appréciée.
OriginalL'auteur vikramjb | 2011-09-09
Vous devez vous connecter pour publier un commentaire.
Le code qui fonctionne maintenant.
certains d'erreur, vous devez encoder(contactNumber) à deux reprises, dans certains cas, votre résultat est null si le numéro de téléphone de votre appareil inclure le code du pays.
pourquoi vous utilisez le "new Random().nextInt();"? dans ce cas, vous devez écrire -1 ou la modifier à nullable de type Entier.
OriginalL'auteur vikramjb
Ok..Désolé, je manque interprété votre question
Je ne l'avait pas fait.Mais je pense que follwing code pourrait fonctionner
Essayez-le et crois-moi savoir:
Je Vous remercie pour vos efforts K-ran-Bête. Pour une raison quelconque, mon code d'origine a commencé à travailler.
bienvenue vikram...pls également publier votre travail fragments aussi, si vous trouver la réponse vous-même....merci 🙂
J'ai posté la version de travail ci-dessus comme la réponse.
OriginalL'auteur Karan_Rana
Exécuter les étapes de la follwing:
//Cette méthode retourne un curseur qui contiendra toute l'info
Ensuite, vous pouvez parcourir par le biais de ce Curseur pour obtenir le nom et l'ID comme Suit:
OriginalL'auteur Karan_Rana
vikramjb réponse est grande, j'ai essayé de le faire d'une façon plus claire (en utilisant les instructions ici https://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.html):
BTW, dans l'api versions (21 ci-dessus), il est le
PHONE_ACCOUNT_ID
colonne dansCallLog.Calls
:https://developer.android.com/reference/android/provider/CallLog.Calls.html
OriginalL'auteur walla