Manera eficiente de cargar todos los contactos y todos los números de teléfono (Android 2.0)

¿Hay una forma de obtener todos los números de teléfono de todos los contactos sin hacer una consulta independiente para cada contacto? (Mediante Android 2.0+). Es muy lento si tienes más de 100 contactos (inutilizable en teléfonos de gama baja), me preguntaba si podía hacer una consulta más eficiente.

Actualmente estoy recibiendo un cursor con todos los contactos válidos ContactsContract.Contacts.IN_VISIBLE_GROUP contactos y luego una consulta independiente para cada contacto para obtener todos sus números.

Snippet de los contactos get get get nombre y clave de búsqueda:

Uri uri = ContactsContract.Contacts.CONTENT_URI; String[] projection = new String[] { ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.LOOKUP_KEY}; 

A continuación, cada contacto utilizando la tecla de búsqueda.

 Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey); Uri res = ContactsContract.Contacts.lookupContact(contentResolver, lookupUri); String[] projection = new String[]{ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER}; 

 Cursor phones = contentResolver.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, phoneProjection, selection, selectionArgs, sortOrder); 

Compruebe si el siguiente código ayuda

  public ArrayList<PhoneContactInfo> getAllPhoneContacts() { Log.d("START","Getting all Contacts"); ArrayList<PhoneContactInfo> arrContacts = new ArrayList<PhoneContactInfo>(); PhoneContactInfo phoneContactInfo=null; Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; Cursor cursor = context.getContentResolver().query(uri, new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone._ID}, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"); cursor.moveToFirst(); while (cursor.isAfterLast() == false) { String contactNumber= cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); int phoneContactID = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID)); phoneContactInfo = new PhoneContactInfo(); phoneContactInfo.setPhoneContactID(phoneContactID); phoneContactInfo.setContactName(contactName); phoneContactInfo.setContactNumber(contactNumber); if (phoneContactInfo != null) { arrContacts.add(phoneContactInfo); } phoneContactInfo = null; cursor.moveToNext(); } cursor.close(); cursor = null; Log.d("END","Got all Contacts"); return arrContacts; } 

¿Por qué lo usas?

Contract.Contacts.IN_VISIBLE_GROUP

¿Todos los contactos de android están asignados a Contract.Contacts.IN_VISIBLE_GROUP?

  • La agregación automática de contactos no funciona al insertar un nuevo contacto
  • ¿Cómo obtener los contactos de un grupo de WhatsApp en Android?
  • Cómo eliminar el número de teléfono de contacto en android?
  • Cómo leer la lista de contactos de whatsapp
  • ¿Cómo iniciar una aplicación desde un contacto en Android?
  • Cómo obtener todos los detalles de un contacto en Android
  • Cómo obtener todos los contactos y todos sus atributos
  • Contactos del dispositivo Android que muestran entradas de contacto duplicadas
  • Cómo agregar un contacto con nombre y apellido por intención
  • Realiza alguna acción con el campo personalizado de Contacto
  • La manera más eficiente de insertar 5000 contactos Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.