ver telefonicos sim recuperar quiero mis contactos como celular anterior android android-contacts phone-number contactscontract
este enlace

telefonicos - Android: recupera el nombre del contacto del número de teléfono



quiero recuperar mis contactos (5)

Me gustaría recuperar el nombre de un contacto asociado con un número de teléfono entrante. A medida que procese el número entrante en el receptor de radiodifusión que tiene una Cadena con el nombre de la persona que llama entrante, me ayudará muchísimo.

Creo que esto implica una consulta utilizando la cláusula WHERE WH1 como filtro, pero ¿necesito ordenar los contactos? Un ejemplo o sugerencia sería de gran ayuda.


Aunque esto ya se ha respondido, esta es la función completa para obtener el nombre del contacto del número. Espero que ayude a otros:

public static String getContactName(Context context, String phoneNumber) { ContentResolver cr = context.getContentResolver(); Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); Cursor cursor = cr.query(uri, new String[]{PhoneLookup.DISPLAY_NAME}, null, null, null); if (cursor == null) { return null; } String contactName = null; if(cursor.moveToFirst()) { contactName = cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME)); } if(cursor != null && !cursor.isClosed()) { cursor.close(); } return contactName; }

[ Actualización basada en el comentario de Marcus]

Deberá solicitar este permiso:

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


Esta versión es la misma que la respuesta de Vikram.exe con código para evitar el ANR

interface GetContactNameListener { void contactName(String name); } public void getContactName(final String phoneNumber,final GetContactNameListener listener) { new Thread(new Runnable() { @Override public void run() { ContentResolver cr = getContentResolver(); Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); Cursor cursor = cr.query(uri, new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME}, null, null, null); if (cursor == null) { return; } String contactName = null; if(cursor.moveToFirst()) { contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); } if(cursor != null && !cursor.isClosed()) { cursor.close(); } listener.contactName(contactName); } }).start(); }


Esto fue muy útil, aquí está mi código final para recuperar el Nombre de la persona que llama, Identificación y Foto:

private void uploadContactPhoto(Context context, String number) { Log.v("ffnet", "Started uploadcontactphoto..."); String name = null; String contactId = null; InputStream input = null; // define the columns I want the query to return String[] projection = new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}; // encode the phone number and build the filter URI Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); // query time Cursor cursor = context.getContentResolver().query(contactUri, projection, null, null, null); if (cursor.moveToFirst()) { // Get values from contacts database: contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup._ID)); name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); // Get photo of contactId as input stream: Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(contactId)); input = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(), uri); Log.v("ffnet", "Started uploadcontactphoto: Contact Found @ " + number); Log.v("ffnet", "Started uploadcontactphoto: Contact name = " + name); Log.v("ffnet", "Started uploadcontactphoto: Contact id = " + contactId); } else { Log.v("ffnet", "Started uploadcontactphoto: Contact Not Found @ " + number); return; // contact not found } // Only continue if we found a valid contact photo: if (input == null) { Log.v("ffnet", "Started uploadcontactphoto: No photo found, id = " + contactId + " name = " + name); return; // no photo } else { this.type = contactId; Log.v("ffnet", "Started uploadcontactphoto: Photo found, id = " + contactId + " name = " + name); }

... simplemente haz lo que quieras con "entrada" (su foto como InputStream), "nombre" y "ID de contacto".

Y aquí están los documentos que enumeran las aproximadamente 15 columnas a las que tiene acceso, solo agréguelas a la proyección cerca del inicio del código arriba: http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.html


Para eso, necesita usar el proveedor optimizado de PhoneLookup como se describe.

Agregue el permiso a AndroidManifest.xml :

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

Entonces:

public String getContactName(final String phoneNumber, Context context) { Uri uri=Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,Uri.encode(phoneNumber)); String[] projection = new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME}; String contactName=""; Cursor cursor=context.getContentResolver().query(uri,projection,null,null,null); if (cursor != null) { if(cursor.moveToFirst()) { contactName=cursor.getString(0); } cursor.close(); } return contactName; }


Pase el número de contacto desde el que recibe la llamada en el siguiente método. Este método verificará si el contacto está guardado en su móvil o no. Si el contacto se guarda, devolverá el nombre del contacto; de lo contrario, devolverá un número desconocido de cadena

Agregue este código en su clase de receptor de difusión

public String getContactDisplayNameByNumber(String number,Context context) { Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); name = "Incoming call from"; ContentResolver contentResolver = context.getContentResolver(); Cursor contactLookup = contentResolver.query(uri, null, null, null, null); try { if (contactLookup != null && contactLookup.getCount() > 0) { contactLookup.moveToNext(); name = contactLookup.getString(contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); // this.id = // contactLookup.getString(contactLookup.getColumnIndex(ContactsContract.Data.CONTACT_ID)); // String contactId = // contactLookup.getString(contactLookup.getColumnIndex(BaseColumns._ID)); }else{ name = "Unknown number"; } } finally { if (contactLookup != null) { contactLookup.close(); } } return name; }

para obtener el código fuente, visite este enlace