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
- Propósito del parámetro args de getLoaderManager (). InitLoader (..., ..., ...)?
- Android servicio notificar actividad completó la mejor manera?
- Obtener el resultado del cursor y convertirlo en una cadena para TextView
- Android LoaderManager y CursorLoader Confusión
- AutoCompleteTextView con lista personalizada: cómo configurar OnItemClickListener
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(); }
- Cómo cargar más de 1 MB de datos desde sqlite db al cursor de Android?
- En Android SQLite, trabajar directamente con Cursor es más eficiente en la memoria que crear objetos de modelo?
- Problema duplicado de Android thumbnail
- Consultar canciones de un álbum con CursorLoader
- MVP para Android: uso seguro Contexto en Presenter
- ¿Cómo crear datos Cursor sin obtener datos de la base de datos en la aplicación de Android?
- Cursor JOIN con el mismo nombre de columna
- Cursor se desactiva antes de llamar a este método
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(); }