Android通过电话号码有效地获取联系人姓名,以便在ListView中显示

时间:2013-01-25 15:37:29

标签: android

我正在创建一个Sms应用,其中包含主活动中的ListView,显示来自短信收件箱的所有会话。每个ListView行显示一个对话以及电话号码,邮件正文和邮件时间。现在,我想显示联系人姓名,而不是电话号码。

到目前为止,为了通过电话号码获取联系人姓名,我找到了此代码

private String getDisplayNameByNumber(String number) {
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));

    Cursor contactLookup = context.getContentResolver().query(uri, new String[] {ContactsContract.PhoneLookup._ID,
                                            ContactsContract.PhoneLookup.DISPLAY_NAME }, null, null, null);

    int indexName = contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME);

    try {
        if (contactLookup != null && contactLookup.moveToNext()) {
            number = contactLookup.getString(indexName);
        }
    } finally {
        if (contactLookup != null) {
            contactLookup.close();
        }
    }

    return number;
}

但这似乎效率低下,因为它必须单独查询每个联系人姓名并滞后于应用程序。因此,我尝试从手机中获取所有联系人姓名并将其存储在HashMap中,并将电话号码作为密钥,将联系人姓名作为值,以便我可以随时获取联系人姓名来自HashMap。但似乎存在另一个问题,电话号码以多种不同的格式存储,例如:

+91 4324244434
04324244434
0224324244434

那么如何从HashMap搜索电话号码,因为它可以以多种不同格式存储?

1 个答案:

答案 0 :(得分:0)

在将联系人添加到HashMap之前,请使用正则表达式来获取电话号码。这样,无论电话号码采用何种格式,正则表达式都能够获取所需的适当数量。

获取号码后,请相应地将其添加到HashMap

希望能回答你的问题。