【问题标题】:Load SMS conversation along with contact name加载短信对话以及联系人姓名
【发布时间】:2015-06-15 14:44:22
【问题描述】:

我正在开发一个 SMS 应用程序并遇到以下问题。目前,我可以使用CursorLoader 提供者Telephony.Sms.Conversations 阅读短信对话。从这个CursorLoader返回的光标,我可以显示电话号码的对话地址。

我的问题是如何有效地检索 SMS 对话联系人姓名以与 SMS 对话一起显示,而不是电话号码。无论如何要从CursorLoader 之前返回的电话号码列表中加载联系人列表吗?当然,我尝试过使用电话号码一一加载联系人姓名,但这会严重降低应用程序的性能。

提前谢谢你。

【问题讨论】:

    标签: android performance sms contacts android-cursorloader


    【解决方案1】:

    我自己一直在寻找解决方案,最终在我看来是一个很好的折衷方案。

    查询完成后,我将我的值存储在 HashMap<String, String> contact_map

    int SENDER_ADDRESS = cursor.getColumnIndex(Telephony.TextBasedSmsColumns.ADDRESS);
    
    while (cursor.moveToNext()) {
                    contact_map.put(
                            cursor.getString(SENDER_ADDRESS),
                            getContactName(getApplicationContext(), cursor.getString(SENDER_ADDRESS))
                    );
                }
    

    方法getContactName:

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

    编辑: 然后我得到联系人姓名

    String name = contact_map.get(cursor.getString(SENDER_ADDRESS));
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      相关资源
      最近更新 更多