Load SMS conversation along with contact name

时间:2015-06-15 14:44:22

标签: android performance sms contacts android-cursorloader

I'm developing a SMS application and come to the following issue. Currently I can read SMS conversation by using provider Telephony.Sms.Conversations by using CursorLoader. From cursor returned by this CursorLoader, I can display conversations's address which are phone numbers.

My question is how to retrieve SMS conversation contact name efficiently to display along with SMS conversation, not the phone number. Is there anyway to load list of contacts from list of phone numbers returned by the CursorLoader before?. Of course I've tried to load one by one contact name by using phone number but that terribly reduce the application performance.

Thank you in advance.

1 个答案:

答案 0 :(得分:1)

我自己一直在寻找解决方案,并最终在我看来做出了妥协。

我的查询完成后,我会将:convert我的值存储为

HashMap<String, String> contact_map

方法getContactName:

int SENDER_ADDRESS = cursor.getColumnIndex(Telephony.TextBasedSmsColumns.ADDRESS);

while (cursor.moveToNext()) {
                contact_map.put(
                        cursor.getString(SENDER_ADDRESS),
                        getContactName(getApplicationContext(), cursor.getString(SENDER_ADDRESS))
                );
            }

编辑: 然后我用

获取联系人姓名
public static String getContactName(Context context, String phoneNumber) {
    ContentResolver cr = context.getContentResolver();
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
    Cursor cursor = cr.query(uri, new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME}, null, null, null);
    if (cursor == null) {
        return null;
    }
    String contactName = null;
    if(cursor.moveToFirst()) {
        contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));
    }

    if(cursor != null && !cursor.isClosed()) {
        cursor.close();
    }

    if (contactName != null) {
        return contactName;
    } else {
        return phoneNumber;
    }

}

希望它有所帮助!