Как получить контактный номер с помощью контактного идентификатора

Здесь мои имена контактов отображаются в виде списка. Нажимая «Список», я получаю ContactName и Contact Id . Из этого я хочу получить Phone number , используя либо Contact ID либо Contact name , пожалуйста, помогите мне.

Вот мой код

 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(); } 

Попробуй это

 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); 

В таблице данных вы найдете номера телефонов. Найдите соответствующие исходные идентификаторы контактов в таблице rawcontacts (используйте идентификатор контакта в качестве критериев), используйте эти исходные идентификаторы контактов для запроса таблицы данных. У phonenumber будет определенный тип mime (вдали от документов теперь), чтобы вы могли их распознать. Надеюсь это поможет!

Советы: скопируйте базу данных contacts2.db из своего эмулятора / устройства и используйте Squirrel (драйвер SQLite jdbc) для поиска в базе данных контактов. ДБ находится под / data / data / ищет контакты в списке).

Ребята, я получил Ответ:

Используйте этот код, если вам нужно:

  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; } 

Попробуй это

 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(); }