Estoy tratando de obtener el nombre y el número de teléfono de un contacto después de que un usuario haya elegido un contacto del selector de contactos. Intento que mi aplicación funcione para SDK v3 y superior, así que creé una clase abstracta que llamaría solo la API que necesitaba. Ya tengo la clase abstracta trabajando (elige la API correcta) y también tengo la API para SDK v3,4 en funcionamiento. Tengo problemas para que funcione la API más nueva que usa ContactsContract.Obtener el número del selector de contactos
Puedo obtener un nombre de contacto, pero el número que recupera siempre es el número de la ID de contacto ¡ANTES! Ejemplo: Tengo 2 contactos "John Doe" y "Jane Doe" con los números respectivos "555-555-555" y "777-777-7777" agregados en los contactos. John Doe es ID = 1 y Jane Doe es ID = 2. Si intento obtener el número de Jane Doe, obtengo el de John, 555-555-5555. Si intento obtener el de John, no obtengo nada. La comprobación de if (cursor.moveToNext()) falla.
¿Me pueden ayudar a solucionar esto? Me vuelve loco. He visto muchos ejemplos y siempre obtengo el mismo error.
Los datos Intención es la intención datos de la onActivityResult
import java.util.ArrayList;
import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Email; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Contacts;
class NewContactsAdapterBridge extends ContactsAdapterBridge {
ArrayList<String> info = new ArrayList<String>();
ArrayList<String> getInfo (Activity a, Intent data) {
Uri contactData = data.getData();
Cursor cursor = a.managedQuery(contactData, null, null, null, null);
if (cursor.moveToFirst()) {
String id = cursor.getString(
cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndexOrThrow
(ContactsContract.Contacts.DISPLAY_NAME));
String hasPhoneNumber = cursor.getString(cursor.getColumnIndexOrThrow(
ContactsContract.Contacts.HAS_PHONE_NUMBER));
info.add(name);
if (Integer.parseInt(hasPhoneNumber) > 0) {
Uri myPhoneUri = Uri.withAppendedPath(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
id);
Cursor pCur = a.managedQuery(
myPhoneUri,
null,
null,
null,
null);
if (pCur.moveToNext()) {
String number = pCur.getString(pCur.getColumnIndex
(ContactsContract.CommonDataKinds.Phone.NUMBER));
info.add(number);
}
}
}
return info;
}
}
Muchas gracias. Tu código era diferente de todo lo demás que he encontrado y funcionó muy bien. Además, su código para seleccionar qué número es extremadamente útil. – user543010
Funciona como un encanto. Me olvidé de agregar el permiso READ_CONTACTS y, por lo tanto, no funcionó al principio, pero luego fue lo mejor que encontré para elegir un contacto. Gracias. :) – buggydroid
¿Qué es CONTACT_PICKER_RESULT? No pude hacerlo. – DuyguK