gracias por la ayuda, ¿cómo puedo mostrar todo el nombre en un ListView? (que podré ver todos los nombres de los contactos en mi teléfono en otras ventanas)? gracias
fsdf fsd
4
Por alguna razón, este código obtiene cada contacto dos veces. ¿Sabes por qué?
Andrew No
1
@Aerrow algunas veces consigue algunos contactos dos veces. ¿Resuelves este problema?
Suman
3
¡no olvide cerrar el cursor!
MikeL
13
NO use este código. Consulta todos los contactos y luego ejecuta una consulta adicional para cada contacto. Rendimiento terrible: puede tardar más de 10 segundos en ejecutarse en un dispositivo real.
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;}}
Buen uso de CursorLoader. ¿Sabe cómo extraer números de teléfono de cada uno de esos contactos dentro de un CursorLoader?
Felker
1
Puede implementar LoaderManager.LoaderCallbacks <Contact> en lugar de LoaderManager.LoaderCallbacks <Cursor>. Donde 'Contacto' es su entidad personalizada.
Artyom
1
@Artyom ¿Puede explicar un poco cómo obtener la parte del número de teléfono?
hushed_voice
15
Obtenga información de contactos, contactos con fotos, uri de fotos y conviértalos al modelo Class
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();}
Recuerde que en el ejemplo anterior la clave es el número de teléfono y el valor es un nombre, así que lea su contenido como 998xxxxx282-> Mahatma Gandhi en lugar de Mahatma Gandhi-> 998xxxxx282
Muchas gracias, lo intentaré, si tengo más preguntas, te
haré
gracias por la ayuda, ¿cómo puedo mostrar todo el nombre en un ListView? (que podré ver todos los nombres de los contactos en mi teléfono en otras ventanas)? gracias
fsdf fsd
6
Esta respuesta es incorrecta. PhoneLookup.NUMBERno es una columna en ContactsContract.Contacts.CONTENT_URI, numberFieldColumnIndexsiempre regresa -1.
cprcrack
2
Debería ser así: 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, escriba una nueva respuesta si está seguro de que esta respuesta, incluida su edición , funcionará.
Bö macht Blau
2
Este es el método para obtener el nombre y número de la lista de contactos
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();}}}}}}
Respuestas:
Prueba esto también
Si necesita más medios de referencia, consulte este enlace Leer ContactList
fuente
y no olvides
fuente
Obtenga información de contactos, contactos con fotos, uri de fotos y conviértalos al modelo Class
1). Ejemplo de modelo de clase:
2). obtener contactos y convertir a modelo
fuente
Mejorando la respuesta de @Adiii: limpiará el número de teléfono y eliminará todos los duplicados
Declarar una variable global
Luego use la función a continuación
Recuerde que en el ejemplo anterior la clave es el número de teléfono y el valor es un nombre, así que lea su contenido como 998xxxxx282-> Mahatma Gandhi en lugar de Mahatma Gandhi-> 998xxxxx282
fuente
El resultado será una matriz de NameFromContacts llena de contactos. También asegúrese de haber agregado
en main.xml
fuente
PhoneLookup.NUMBER
no es una columna enContactsContract.Contacts.CONTENT_URI
,numberFieldColumnIndex
siempre regresa-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();
Este es el método para obtener el nombre y número de la lista de contactos
fuente
fuente
Obtén todos los contactos en menos de un segundo y sin ningún tipo de carga en tu actividad - seguir mis pasos funciona a las mil maravillas.
Contactos
Beneficios
fuente