我正在创建一个短信应用程序,它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
因为它可以以多种不同的格式存储?