2015-05-14 6 views
2

Я был на эту тему Android get contact id from thread id, где у кого-то был тот же вопрос, что и я. К сожалению, лопес.mikhael ответил полностью не на цель.Получить контакт по thread_id

Как я могу получить идентификатор контакта с thread_id из URI content://sms/conversations? Предполагая, что он возвращает:

- thread_id 
- snippet 
- msg_count 

Получение всех контактов не помогает. Я искал в getColumnsNames() оттуда, и я не вижу никакого хорошего имени столбца, которое будет содержать thread_id.

Почему это не задокументировано? Не рекомендуется ли использовать content://sms/? Есть ли другое решение?

спасибо.

+0

от имени столбца адреса, который вы можете получить контактный номер телефона, то с помощью этого телефонного номера вы можете получить контактные данные –

+0

Как могу ли я найти этот конкретный контакт без какой-либо информации в 'content: // sms/conversations'? – Sw0ut

ответ

2

Как уже упоминалось здесь, на этом post

Вы можете получить смс-ящик:

Uri mSmsinboxQueryUri = Uri.parse("content://sms/inbox"); 
    String where = "thread_id="+ <thread id you get it from content://sms/conversations>; 
    Cursor cursor1 = getContentResolver().query(mSmsinboxQueryUri,new String[] { "_id", "thread_id", "address", "person", "date","body", "type" }, where, null, null); 
    String[] columns = new String[] { "address", "person", "date", "body","type" }; 
    if (cursor1.getCount() > 0) { 
     String count = Integer.toString(cursor1.getCount()); 
     while (cursor1.moveToNext()){ 
       String address = cursor1.getString(cursor1.getColumnIndex(columns[0])); 
       String name = cursor1.getString(cursor1.getColumnIndex(columns[1])); 
       String date = cursor1.getString(cursor1.getColumnIndex(columns[2])); 
       String msg = cursor1.getString(cursor1.getColumnIndex(columns[3])); 
       String type = cursor1.getString(cursor1.getColumnIndex(columns[4])); 
     } 
    } 

Вы можете получить другие отправленные элементы путем изменения URI.

Uri mSmsinboxQueryUri = Uri.parse("content://sms/sent"); 

Ones у вас есть номер телефона, вы можете найти идентификатор контакта, используя ниже кода

String contactid = null; 

ContentResolver contentResolver = getContentResolver(); 

Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phonenumintolist)); 

Cursor cursor = contentResolver.query(
         uri, 
         new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID}, 
         null, 
         null, 
         null); 

if(cursor!=null) { 
while(cursor.moveToNext()){ 
    String contactName = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME)); 
    contactid = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup._ID)); 
} 
cursor.close(); 
} 
if (contactid == null) { 
    Toast.makeText(DetailedCallHistory.this, "No contact found associated with this number", Toast.LENGTH_SHORT).show(); 
}else{ 
//You can contact id do what you want to do with it. 
} 
+0

Я уже нашел этот ответ, но не нашел его убедительным. Я хотел бы иметь только разговоры в первый раз. Является ли это возможным ? Это для входящих или отправленных элементов. Вы не отвечаете на мой вопрос. - ** РЕДАКТИРОВАТЬ ** - или, может быть, скажите, если то, что я прошу, невозможно? – Sw0ut

+0

проверьте обновление. Я добавил, где предложение для получения входящих сообщений sms на основе thread_id, from thread_id вы получаете номер телефона и из номера звонящего, вы получаете контактный идентификатор –

+0

Спасибо за полный ответ, но все же не в ожидании. Фактически, возьмите пример из приложения «Сообщения». Сначала вы получаете все разговоры, а затем, если вы нажмете на разговор, вы получите все полученные/отправленные сообщения для этого разговора. Я хотел иметь идентификатор контакта с первого экрана, где он показывает все разговоры. Есть идеи ? Потому что это касается контактной информации, когда мы находимся внутри разговора. – Sw0ut

Смежные вопросы