Android получает идентификатор контакта из идентификатора потока

Я работаю над простым sms-приложением, и я использую приведенный ниже код, чтобы получить идентификатор потока при загрузке списка моих потоков, но я не могу понять, как получить идентификатор контакта, используя идентификатор потока. Я root и использую root explorer, который я вижу в базе данных, есть таблица контактов со следующими столбцами

thread_id | htcthread_id | contact_id

Так как у меня есть идентификатор потока, я должен иметь возможность получить идентификатор контакта, но я также должен убедиться, что это работает на всех устройствах. Кстати, мое приложение не является root

код для получения идентификатора потока

 Uri uri = Uri.parse("content://mms-sms/conversations?simple=true"); Cursor c = context.getContentResolver().query(uri, null, null, null, "date desc"); if (c.getCount() > 0) { while (c.moveToNext()){ //thread id is c.getString(c.getColumnIndexOrThrow("_id")) } } c.close 

Мое решение для восстановления всех контактов:

  Cursor cursor = null; try { cursor = context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null); int contactIdIdx = cursor.getColumnIndex(Phone._ID); int nameIdx = cursor.getColumnIndex(Phone.DISPLAY_NAME); int phoneNumberIdx = cursor.getColumnIndex(Phone.NUMBER); int photoIdIdx = cursor.getColumnIndex(Phone.PHOTO_ID); cursor.moveToFirst(); do { String idContact = cursor.getString(contactIdIdx); String name = cursor.getString(nameIdx); String phoneNumber = cursor.getString(phoneNumberIdx); //... } while (cursor.moveToNext()); } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } } 

Вам нужно это разрешение в вашем манифесте:

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

Надеюсь, я помог вам!