merci pour l'aide, comment puis-je afficher tout le nom dans un ListView? (que je pourrai voir tous les noms de contacts dans mon téléphone dans une autre fenêtre)? merci
fsdf fsd
4
Pour une raison quelconque, ce code obtient chaque contact deux fois. Savez-vous pourquoi?
Andrew No
1
@Aerrow a parfois des contacts deux fois. Résolvez-vous ce problème?
Suman
3
n'oubliez pas de fermer le curseur!
MikeL
13
N'UTILISEZ PAS ce code. Il interroge tous les contacts, puis exécute une requête supplémentaire pour chaque contact unique. Performances terribles - peut prendre plus de 10 secondes pour fonctionner sur un appareil réel.
Vasiliy
15
publicclassMyActivityextendsActivityimplementsLoaderManager.LoaderCallbacks<Cursor>{privatestaticfinalint CONTACTS_LOADER_ID =1;@Overridepublicvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
setContentView(R.layout.main);// Prepare the loader. Either re-connect with an existing one,// or start a new one.
getLoaderManager().initLoader(CONTACTS_LOADER_ID,null,this);}@OverridepublicLoader<Cursor> onCreateLoader(int id,Bundle args){// This is called when a new Loader needs to be created.if(id == CONTACTS_LOADER_ID){return contactsLoader();}returnnull;}@Overridepublicvoid onLoadFinished(Loader<Cursor> loader,Cursor cursor){//The framework will take care of closing the// old cursor once we return.List<String> contacts = contactsFromCursor(cursor);}@Overridepublicvoid onLoaderReset(Loader<Cursor> loader){// This is called when the last Cursor provided to onLoadFinished()// above is about to be closed. We need to make sure we are no// longer using it.}privateLoader<Cursor> contactsLoader(){Uri contactsUri =ContactsContract.Contacts.CONTENT_URI;// The content URI of the phone contactsString[] projection ={// The columns to return for each rowContactsContract.Contacts.DISPLAY_NAME
};String selection =null;//Selection criteriaString[] selectionArgs ={};//Selection criteriaString sortOrder =null;//The sort order for the returned rowsreturnnewCursorLoader(
getApplicationContext(),
contactsUri,
projection,
selection,
selectionArgs,
sortOrder);}privateList<String> contactsFromCursor(Cursor cursor){List<String> contacts =newArrayList<String>();if(cursor.getCount()>0){
cursor.moveToFirst();do{String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
contacts.add(name);}while(cursor.moveToNext());}return contacts;}}
Bonne utilisation de CursorLoader. Savez-vous comment extraire les numéros de téléphone de chacun de ces contacts dans un CursorLoader?
Felker
1
Vous pouvez implémenter LoaderManager.LoaderCallbacks <Contact> à la place de LoaderManager.LoaderCallbacks <Cursor>. Où «Contact» est votre entité personnalisée.
Artyom
1
@Artyom Pouvez-vous expliquer comment obtenir un peu la partie du numéro de téléphone?
hushed_voice
15
Obtenez des informations de contacts, des contacts photo, des uri photo et convertissez-les en modèle de classe
privatevoid getPhoneNumbers(){Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);// Loop Through All The Numberswhile(phones.moveToNext()){String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));// Cleanup the phone number
phoneNumber = phoneNumber.replaceAll("[()\\s-]+","");// Enter Into Hash Map
namePhoneMap.put(phoneNumber, name);}// Get The Contents of Hash Map in Logfor(Map.Entry<String,String> entry : namePhoneMap.entrySet()){String key = entry.getKey();Log.d(TAG,"Phone :"+ key);Stringvalue= entry.getValue();Log.d(TAG,"Name :"+value);}
phones.close();}
Rappelez-vous que dans l'exemple ci-dessus, la clé est le numéro de téléphone et la valeur est un nom, alors lisez votre contenu comme 998xxxxx282-> Mahatma Gandhi au lieu de Mahatma Gandhi -> 998xxxxx282
merci beaucoup je vais l'essayer, si j'ai d'autres questions je vais vous poser
fsdf fsd
merci pour l'aide, comment puis-je afficher tout le nom dans un ListView? (que je pourrai voir tous les noms de contacts dans mon téléphone dans une autre fenêtre)? merci
fsdf fsd
6
Cette réponse est fausse. PhoneLookup.NUMBERn'est pas une colonne dans ContactsContract.Contacts.CONTENT_URI, numberFieldColumnIndexretournant toujours -1.
cprcrack
2
Il devrait être comme ceci: Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); while (phones.moveToNext()) { String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } phones.close();
user1510006
1
@gunner_dev veuillez écrire une nouvelle réponse si vous êtes sûr que cette réponse, y compris votre modification , fonctionnera.
Bö macht Blau
2
C'est la méthode pour obtenir le nom et le numéro de la liste de contacts
privatevoid getAllContacts(){ContentResolver contentResolver = getContentResolver();Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME +" ASC");if(cursor.getCount()>0){while(cursor.moveToNext()){int hasPhoneNumber =Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));if(hasPhoneNumber >0){String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",newString[]{id},null);if(phoneCursor !=null){if(phoneCursor.moveToNext()){String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));//At here You can add phoneNUmber and Name to you listView ,ModelClass,Recyclerview
phoneCursor.close();}}}}}}
Réponses:
Essayez ceci aussi,
Si vous avez besoin de plus de références, consultez ce lien Lire la liste de contacts
la source
et n'oubliez pas
la source
Obtenez des informations de contacts, des contacts photo, des uri photo et convertissez-les en modèle de classe
1). Exemple de modèle de classe:
2). obtenir des contacts et les convertir en modèle
la source
Amélioration de la réponse de @Adiii - Cela nettoiera le numéro de téléphone et supprimera tous les doublons
Déclarer une variable globale
Ensuite, utilisez la fonction ci-dessous
Rappelez-vous que dans l'exemple ci-dessus, la clé est le numéro de téléphone et la valeur est un nom, alors lisez votre contenu comme 998xxxxx282-> Mahatma Gandhi au lieu de Mahatma Gandhi -> 998xxxxx282
la source
Le résultat sera un tableauNameFromContacts rempli de contacts. Assurez-vous également que vous avez ajouté
dans main.xml
la source
PhoneLookup.NUMBER
n'est pas une colonne dansContactsContract.Contacts.CONTENT_URI
,numberFieldColumnIndex
retournant toujours-1
.Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); while (phones.moveToNext()) { String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } phones.close();
C'est la méthode pour obtenir le nom et le numéro de la liste de contacts
la source
la source
obtenir tous les contacts en moins d'une seconde et sans aucune charge dans votre activité - suivez mes pas fonctionne comme un charme.
Contacts
Avantages
la source