Android通讯录号码匹配联系人名

输入通讯录号码直接拿到联系人名,在 Android 开发里算是比较常见的小功能,像做来电识别、短信助手、甚至一些社交 App 都会用到这个。关键在于你得搞清楚 Android 通讯录的数据结构,怎么用ContentResolver去查数据表,怎么根据mimetype字段区分姓名和号码——逻辑清晰,操作也不算难。

权限申是第一步,在AndroidManifest.xml里加上READ_CONTACTS权限,这一步别忘了,不面再怎么查也查不到。

就用ContentResolver开查,配合ContactsContract.CommonDataKinds.Phone.CONTENT_URI和号码构造查询条件。比如:

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " = ?";
String[] selectionArgs = { normalizedNumber };
Cursor cursor = resolver.query(uri, null, selection, selectionArgs, null);

号码记得用PhoneNumberUtils.normalizeNumber()先规范一下,格式统一了才方便匹配。查出来的Cursor结果再遍历,用getColumnIndex()getString()取出联系人名。

还有一点值得注意,大数据量的情况下最好用异步操作,比如AsyncTask或者LiveData,别堵主线程。权限问题也要好,动态权限申是标配了。

如果你想快速实现这个功能,或者正好在做类似需求,这段逻辑用起来还挺顺手的。更多相关技巧你也可以看看这些资料:

蛮实用的技巧,用好了能帮你节省不少开发时间。

zip 文件大小:53.42KB