Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo obtener el número de teléfono de los contactos en Android

Mi código es el siguiente:

String[] columns = {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER}; Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, columns, null, null, null); int ColumeIndex_ID = cursor.getColumnIndex(ContactsContract.Contacts._ID); int ColumeIndex_DISPLAY_NAME = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); int ColumeIndex_HAS_PHONE_NUMBER = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER); while(cursor.moveToNext()) { String id = cursor.getString(ColumeIndex_ID); String name = cursor.getString(ColumeIndex_DISPLAY_NAME); String has_phone = cursor.getString(ColumeIndex_HAS_PHONE_NUMBER); if(!has_phone.endsWith("0")) { System.out.println(name); GetPhoneNumber(id); } } cursor.close(); public String GetPhoneNumber(String id) { String number = ""; Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone._ID + " = " + id, null, null); if(phones.getCount() > 0) { while(phones.moveToNext()) { number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } System.out.println(number); } phones.close(); return number; } 

Obtengo el éxito de los contactos, pero el número de teléfono falla en GetPhoneNumber() .
El phones.getCount() siempre es igual a 0.
¿Cómo puedo modificar?

  • Ordenar una lista en orden ascendente por fecha desde sqlite
  • Cómo mostrar las imágenes guardadas en la carpeta sdcard en android
  • ¿Cuándo cerrar el cursor en Android?
  • ¿Cómo se implementa el cursor de la base de datos de Android en los detalles?
  • Consultar el cursor MediaStore utilizando una carpeta específica
  • Optimización del acceso a cursores en Android: Posición vs nombres de columna
  • ¿Qué significa "declaración inválida en fillWindow ()" en el cursor de Android?
  • Cree un cursor de matriz en lugar de DB
  • 5 Solutions collect form web for “Cómo obtener el número de teléfono de los contactos en Android”

    API de contacto de Android para 2.0

     // // Find contact based on name. // ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, "DISPLAY_NAME = '" + NAME + "'", null, null); if (cursor.moveToFirst()) { String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); // // Get all phone numbers. // Cursor phones = cr.query(Phone.CONTENT_URI, null, Phone.CONTACT_ID + " = " + contactId, null, null); while (phones.moveToNext()) { String number = phones.getString(phones.getColumnIndex(Phone.NUMBER)); int type = phones.getInt(phones.getColumnIndex(Phone.TYPE)); switch (type) { case Phone.TYPE_HOME: // do something with the Home number here... break; case Phone.TYPE_MOBILE: // do something with the Mobile number here... break; case Phone.TYPE_WORK: // do something with the Work number here... break; } } phones.close(); } cursor.close(); 

    Para más información vea este enlace

    prueba esto.

      ContentResolver cr = getContentResolver(); Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if (cur.getCount() > 0) { while (cur.moveToNext()) { String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); Log.i("Names", name); if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { // Query phone here. Covered next Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,null, null); while (phones.moveToNext()) { String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); Log.i("Number", phoneNumber); } phones.close(); } } } 

    Necesitas permiso como –

      android:name="android.permission.READ_CONTACTS"/> 

    Luego, Llamando al selector de contactos

      Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 

    Entonces,

     @Override public void onActivityResult(int reqCode, int resultCode, Intent data) { super.onActivityResult(reqCode, resultCode, data); switch (reqCode) { case (PICK_CONTACT) : if (resultCode == Activity.RESULT_OK) { Uri contactData = data.getData(); Cursor c = managedQuery(contactData, null, null, null, null); if (c.moveToFirst()) { String name = c.getString(c.getColumnIndexOrThrow(People.NAME)); // TODO Whatever you want to do with the selected contact name. } } break; } } 

    Vieja pregunta pero no veo la siguiente respuesta aquí.

     private static final String[] PROJECTION ={ ContactsContract.Contacts._ID, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.Contacts.DISPLAY_NAME_PRIMARY, ContactsContract.Contacts.PHOTO_THUMBNAIL_URI, ContactsContract.Contacts.LOOKUP_KEY, }; new CursorLoader( this, ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, null, null,//mSelectionArgs, ContactsContract.Contacts.DISPLAY_NAME_PRIMARY ); 

    Utilice el índice de columna ContactsContract.CommonDataKinds.Phone.NUMBER para recuperar el número de teléfono desde el cursor.

    U puede utilizar selector de contactos.

    Llame al selector de contactos de cualquier botón y use el siguiente código:

    | * | Añadir en: AndroidManifest.xml

     <uses-permission android:name="android.permission.READ_CONTACTS"/> 

    | * | Añadir en: activity_name.java

     void calContctPickerFnc() { Intent calContctPickerIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); calContctPickerIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); startActivityForResult(calContctPickerIntent, 1); } @Override public void onActivityResult(int reqCode, int resultCode, Intent data) { super.onActivityResult(reqCode, resultCode, data); switch (reqCode) { case (1) : if (resultCode == Activity.RESULT_OK) { Uri contctDataVar = data.getData(); Cursor contctCursorVar = getContentResolver().query(contctDataVar, null, null, null, null); if (contctCursorVar.getCount() > 0) { while (contctCursorVar.moveToNext()) { String ContctUidVar = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.Contacts._ID)); String ContctNamVar = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); Log.i("Names", ContctNamVar); if (Integer.parseInt(contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { // Query phone here. Covered next String ContctMobVar = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); Log.i("Number", ContctMobVar); } } } } break; } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.