2014-02-06 4 views
0

фрагмент кода ниже возвращает базовый SMS разговор данных:SMS показать имя контакта Android от recipient_ids

Cursor cursor = activity.getContentResolver().query(Uri.parse("content://mms-sms/conversations?simple=true"), null, null, null, "normalized_date desc"); 
if(cursor.moveToFirst()) 
    String recipient_ids = cursor.getString(3); 

Мой вопрос заключается в том, что как я могу получить контактные данные телефон, по учитывая, что recipient_ids? В этом случае мне нужно получить номер контакта и связаться с именем display_name.

Ваша помощь очень признательна. Заранее спасибо!

+0

Это похоже на сбой на Galaxy Note 2 с Android 4.3. Ошибка: 'Caused by: android.database.sqlite.SQLiteException: нет такого столбца: normalized_date (код 1): при компиляции: SELECT * FROM threads ORDER BY normalized_date desc'. Как вы можете определить, не существует ли столбец normalized_date? Я тестировал это на других версиях андроида без проблем. – toobsco42

ответ

3

Попробуйте это:

public String getContactData(String id){ 
    String number; 

    Cursor phones = fa.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id, null, null); 
    if(phones.moveToFirst()) { 
     number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));  
    } 

    phones.close(); 
    return number; 
} 

Надеется, что это помогает!

3

Это то, что работает в моем приложении:

private String getContactNumber(final long recipientId) { 
    String number = null; 
    Cursor c = getContentResolver().query(ContentUris 
      .withAppendedId(Uri.parse("content://mms-sms/canonical-address"), recipientId), 
      null, null, null, null); 
    if (c.moveToFirst()) { 
     number = c.getString(0); 
    } 
    c.close(); 
    return number; 
} 

контакт номер сохраняется в некоторой таблице называется canonical-address.
Это было как-то плохой багги несколько лет назад. Обновления контакта не распространялись через эту таблицу должным образом. Но я думаю, что сейчас все в порядке.

Вы в основном должны разбирать (список) идентификаторов в одиночные идентификаторы. Затем запросите базу данных для каждого из них.
Вы можете использовать один единственный запрос для всех идентификаторов вместе.

+0

Спасибо за ваш ответ, но он дал мне эту ошибку 'java.lang.IllegalStateException: Неопознанный URI: content: // mms-sms/canonical-address' –

+0

Пожалуйста, попробуйте uri с добавленным /. Он работает в моих приложениях уже 5 лет. ;-) попытайтесь заменить содержимое contenturi на выбор '' _id = "+ recipientId' – flx

+0

, давая это исключение в некоторых телефонах. Fatal Exception: android.database.sqlite.SQLiteException нет такого столбца: data1 (код 1) :, при компиляции: SELECT data1 FROM canonical_addresses WHERE _id = 1127 –

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