【问题标题】:Android get contact names by phone number efficiently for displaying in ListViewAndroid通过电话号码有效地获取联系人姓名以在ListView中显示
【发布时间】:2013-01-09 14:32:18
【问题描述】:

我正在创建一个短信应用,它在主活动中包含一个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 中搜索电话号码,因为它可以以多种不同的格式存储?

【问题讨论】:

    标签: android


    【解决方案1】:

    在将联系人添加到HashMap 之前,请使用正则表达式来获取电话号码。这样,无论电话号码是什么格式,正则表达式都能抓取到所需的相应号码。

    获取号码后,将其添加到HashMap

    希望能回答你的问题。

    【讨论】:

    • 我认为电话号码可以以多种不同的格式存储,为此创建一个正则表达式可能很困难。您是否知道 Android 库(问题中发布的代码)如何搜索电话号码并始终提供完全匹配?
    • @Sam 对不起,我在那个部门帮不了你。尝试在developer.android.com/training/index.html 上查看 Google 的 Android 资源。此外,这也可能是一个相关问题:stackoverflow.com/questions/3079365/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 2011-07-30
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多