最近要开发一个功能,能够查询手机内部的通讯录、通话记录、短信、应用、资源管理等内容,所以将一下方法作下记录。其中通讯录、通话记录和短信都是支持输入号码或者名字或者内容就能模糊匹配的。
1、通讯录模糊查询
public List<Map<String, String>> searchContacts(Activity context, String keyword) {
ContentResolver cr = context.getContentResolver();
List<Map<String, String>> contactList = new ArrayList<>();
if (isPhoneNum(keyword)) {
Cursor cursorP = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.NUMBER + " like " + "'%" + keyword + "%'",
null,
null);
while (cursorP.moveToNext()) {
Map<String, String> map = new HashMap<>();
String phoneNumber = cursorP.getString(cursorP.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String photo = cursorP.getString(cursorP.getColumnIndex(ContactsContract.CommonDataKinds.Photo.PHOTO_URI));
String contactId = cursorP.getString(cursorP.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
Cursor nameC = cr.query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Contacts._ID + "=" + contactId, null, null);
while (nameC.moveToNext()) {
String name = nameC.getString(nameC.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.i(TAG, "name=" + name + "phoneNumber=" + phoneNumber + ",photo=" + photo);
map.put("name", name);
map.put("phoneNum", phoneNumber);
map.put("photo", photo);
contactList.add(map);
}
}
cursorP.close();
} else {
Cursor cursorName = cr.query(
ContactsContract.Contacts.CONTENT_URI,
null,
ContactsContract.PhoneLookup.DISPLAY_NAME + " like " + "'%" + keyword + "%'",
null,
null);
while (cursorName.moveToNext()) {
String name = cursorName.getString(
cursorName.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String contactId = cursorName