Android通过电话号码有效地获取联系人姓名以在ListView中显示
Posted
技术标签:
【中文标题】Android通过电话号码有效地获取联系人姓名以在ListView中显示【英文标题】:Android get contact names by phone number efficiently for displaying in 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
中搜索电话号码,因为它可以以多种不同的格式存储?
【问题讨论】:
【参考方案1】:在将联系人添加到HashMap
之前,请使用正则表达式来获取电话号码。这样,无论电话号码是什么格式,正则表达式都能抓取到所需的相应号码。
获取号码后,将其添加到HashMap
。
希望能回答你的问题。
【讨论】:
我认为电话号码可以以多种不同的格式存储,为此创建一个正则表达式可能很困难。您是否知道 android 库(问题中发布的代码)如何搜索电话号码并始终提供完全匹配? @Sam 对不起,我在那个部门帮不了你。尝试在developer.android.com/training/index.html 上查看 Google 的 Android 资源。此外,这也可能是一个相关问题:***.com/questions/3079365/…以上是关于Android通过电话号码有效地获取联系人姓名以在ListView中显示的主要内容,如果未能解决你的问题,请参考以下文章