Cómo obtener el número de contacto específico mediante el uso de Id de contacto

Aquí mis nombres de contactos se muestran en la vista de lista. Al hacer clic en la lista obtengo ContactName y Contact Id . A partir de eso, quiero obtener el Phone number mediante el uso de Contact ID Contact name o Contact name , por favor, me ayuda.

Aquí está mi código

 void ReadContacts(String sort) { final Uri uri = ContactsContract.Contacts.CONTENT_URI; final String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME }; //boolean mShowInvisible = false; String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'"; String[] selectionArgs = null; final String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; m_curContacts = managedQuery(uri, projection, selection, selectionArgs, sortOrder); String[] fields = new String[] {ContactsContract.Data.DISPLAY_NAME}; m_slvAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, m_curContacts, fields, new int[] {android.R.id.text1}); m_slvAdapter.setFilterQueryProvider(new FilterQueryProvider() { public Cursor runQuery(CharSequence constraint) { Log.d(LOG_TAG, "runQuery constraint:"+constraint); String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'" + " AND "+ ContactsContract.Contacts.DISPLAY_NAME + " LIKE '%"+constraint+"%'"; String[] selectionArgs = null;//new String[]{"'1'"};//, }; Cursor cur = managedQuery(uri, projection, selection, selectionArgs, sortOrder); return cur; } }); m_lvContacts.setAdapter(m_slvAdapter); // cur.close(); } public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { ContentResolver cr; Cursor cursor = (Cursor) m_lvContacts.getItemAtPosition(position); String szDisplayName = cursor.getString(cursor.getColumnIndexOrThrow( ContactsContract.Contacts.DISPLAY_NAME)); String szId = cursor.getString(cursor.getColumnIndexOrThrow( ContactsContract.Contacts._ID)); int nId = cursor.getInt(cursor.getColumnIndexOrThrow( ContactsContract.Contacts._ID)); Log.d(LOG_TAG, "Item click:"+position+" szId:"+szId+" nId:"+nId+" Data:"+szDisplayName); Toast.makeText(getBaseContext(), "Item click:"+phoneNumber+" szId:"+szId+" nId:"+nId+" Data:"+szDisplayName, Toast.LENGTH_SHORT).show(); } 

Prueba éste

 ArrayList<String> phones = new ArrayList<String>(); Cursor cursor = mContentResolver.query( CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null); while (cursor.moveToNext()) { phones.add(cursor.getString(cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER))); } cursor.close(); return(phones); 

Encontrará los números de teléfono en la tabla de datos. Encuentre los identificadores de contacto raw correspondientes en la tabla rawcontacts (use el identificador de contacto como criterio where), utilice estos identificadores de contacto sin formato para consultar la tabla de datos. El número de teléfono tendrá un cierto tipo de MIME (lejos de los documentos ahora) para que pueda reconocerlos. ¡Espero que esto ayude!

Sugerencias: copie la base de datos contacts2.db desde su emulador / dispositivo y utilice Squirrel (controlador SQLite jdbc) para desplazarse por la base de datos de contactos. El db se encuentra en / data / data / buscar contactos en la lista).

Chicos tengo la respuesta:

Utilice por favor este código si usted necesita:

  Cursor cursor = (Cursor) m_lvContacts.getItemAtPosition(position); String szDisplayName = cursor.getString(cursor.getColumnIndexOrThrow( ContactsContract.Contacts.DISPLAY_NAME)); String szId = cursor.getString(cursor.getColumnIndexOrThrow( ContactsContract.Contacts._ID)); int nId = cursor.getInt(cursor.getColumnIndexOrThrow( ContactsContract.Contacts._ID)); long l = Long.parseLong(szId); int type=ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE; cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"='"+szId+"'", null, 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); System.out.println("HAGSd"+phoneNumber); } } finally { Log.v(TAG, "In finally"); cursor.close(); } 
 public static final String contactIdByPhoneNumber(Context ctx, String phoneNumber) { String contactId = null; if (phoneNumber != null && phoneNumber.length() > 0) { ContentResolver contentResolver = ctx.getContentResolver(); Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); String[] projection = new String[] { PhoneLookup._ID }; Cursor cursor = contentResolver.query(uri, projection, null, null, null); if (cursor != null) { while (cursor.moveToNext()) { contactId = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup._ID)); } cursor.close(); } } return contactId; } 

Prueba éste

 public void getNameUsingContactId(String contactId){ String cContactIdString = ContactsContract.Contacts._ID; Uri cCONTACT_CONTENT_URI = ContactsContract.Contacts.CONTENT_URI; String cDisplayNameColumn = ContactsContract.Contacts.DISPLAY_NAME; String selection = cContactIdString + " = ? "; String[] selectionArgs = new String[]{String.valueOf(contactId)}; Cursor cursor = mContext.getContentResolver().query(cCONTACT_CONTENT_URI, null, selection, selectionArgs, null); if ((cursor != null) && (cursor.getCount() > 0)) { cursor.moveToFirst(); while ((cursor != null) && (cursor.isAfterLast() == false)) { if (cursor.getColumnIndex(cContactIdString) >= 0) { if (contactId.equals(cursor.getString(cursor.getColumnIndex(cContactIdString)))) { String name = cursor.getString(cursor.getColumnIndex(cDisplayNameColumn)); break; } } cursor.moveToNext(); } } if (cursor != null) cursor.close(); } 
  • Cómo obtener las cadenas de un cursor en Android?
  • Cursor.getType () para el nivel de API <11
  • ¿Está bien tener una instancia de SQLiteOpenHelper compartida por todas las actividades en una aplicación de Android?
  • Cuándo cerrar Cursor utilizado en SimpleCursorAdapter
  • Obtener la última URL visitada en Chrome y en otros navegadores
  • GetSupportLoaderManager () utiliza ids iguales en fragmentos diferentes?
  • AlphabetIndexer setCursor no actualiza su caché
  • Consulta SQLite SQLiteLog (1) no such Column:
  • Recuperar imágenes de una carpeta determinada en Android
  • La asignación de ventana de cursor de 2048 kb falló. # Cursores abiertos = 1 (# cursores abiertos por este proc = 1)
  • ¿Qué hace LoaderManager?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.