Estoy tratando de obtener el número de teléfono del contacto después de haber recuperado su número de identificación de la actividad incorporada. Sin embargo, cada vez que consulto la base de datos usando el cursor en mi código a continuación, obtengo cero filas aunque haya un número de teléfono móvil para el contacto que he seleccionado.Recuperar número de teléfono de contacto de URI en Android
¿Alguien puede indicarme una mejor dirección o mostrar un ejemplo de cómo obtener el número de teléfono del contacto DESPUÉS de obtener su ID de usuario?
Mi código:
private Runnable getSMSRunnable() {
return new Runnable() {
public void run() {
Intent i = new Intent(Intent.ACTION_PICK,
ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(i, CONTACTS_REQUEST_CODE);
}
};
}
Devuelve la salida del registro
content://com.android.contacts/data/6802
de la que pasa un ID (6802) en un método que está diseñado para devolver el número de teléfono de la identificación con el determinado tipo (en este caso ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
public static String getContactPhoneNumberByPhoneType(Context context, long contactId, int type) {
String phoneNumber = null;
String[] whereArgs = new String[] { String.valueOf(contactId), String.valueOf(type) };
Log.d(TAG, String.valueOf(contactId));
Cursor cursor = context.getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? and "
+ ContactsContract.CommonDataKinds.Phone.TYPE + " = ?", whereArgs, null);
int phoneNumberIndex = cursor
.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER);
Log.d(TAG, String.valueOf(cursor.getCount()));
if (cursor != null) {
Log.v(TAG, "Cursor Not null");
try {
if (cursor.moveToNext()) {
Log.v(TAG, "Moved to first");
Log.v(TAG, "Cursor Moved to first and checking");
phoneNumber = cursor.getString(phoneNumberIndex);
}
} finally {
Log.v(TAG, "In finally");
cursor.close();
}
}
Log.v(TAG, "Returning phone number");
return phoneNumber;
}
que devuelve null para un número de teléfono, lo que significa que no puede encontrar la fila a la que estoy intentando acceder, lo que significa que algo está mal con mi consulta; sin embargo, si verifico un contacto que tenga un número de teléfono móvil, ¿cómo podría obtener una consulta de 0 filas?
Cualquier ayuda sería muy apreciada. Muchas gracias!
Esto funciona incluso si su explicación no es clara. Por qué teléfonoCONTACT_ID (contact_id) no coincide con CONTACTS._ID (_id) – redochka
Tal vez es más fácil si lo explico de esta manera: '_ID' es para la base de datos,' CONTACT_ID' es para un ID de contacto cuando no está consultando esa tabla específica . ¿Esto ayuda? – hwrdprkns
En pocas palabras: Phones._ID == Contacts._ID – redochka