From f6055df0391f5be05e13ea3c845e3d5bd237027d Mon Sep 17 00:00:00 2001 From: cnz <2869874844@qq.com> Date: Mon, 28 Apr 2025 10:47:17 +0800 Subject: [PATCH] 123 --- src/net/micode/notes/data/Contact.java | 32 +++++++++++++++++++------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/net/micode/notes/data/Contact.java b/src/net/micode/notes/data/Contact.java index d97ac5d..e836625 100644 --- a/src/net/micode/notes/data/Contact.java +++ b/src/net/micode/notes/data/Contact.java @@ -16,7 +16,7 @@ package net.micode.notes.data; -import android.content.Context; +import android.content.Context;//导入包 import android.database.Cursor; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Data; @@ -25,9 +25,16 @@ import android.util.Log; import java.util.HashMap; -public class Contact { +public class Contact {//创建类 private static HashMap sContactCache; - private static final String TAG = "Contact"; + private static final String TAG = "Contact";// 日志标签 + + /** + * 查询条件:通过电话号码匹配联系人 + * 1. 使用PHONE_NUMBERS_EQUAL比较号码 + * 2. 限定数据类型为电话类型 + * 3. 通过phone_lookup表优化查询性能 + */ private static final String CALLER_ID_SELECTION = "PHONE_NUMBERS_EQUAL(" + Phone.NUMBER + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'" @@ -36,21 +43,30 @@ public class Contact { + " FROM phone_lookup" + " WHERE min_match = '+')"; +/** + * 根据电话号码获取联系人姓名 + * @param context 上下文对象 + * @param phoneNumber 要查询的电话号码 + * @return 联系人姓名,若未找到则返回null + */ + public static String getContact(Context context, String phoneNumber) { + // 初始化缓存 if(sContactCache == null) { sContactCache = new HashMap(); } - + // 检查缓存 if(sContactCache.containsKey(phoneNumber)) { return sContactCache.get(phoneNumber); } - + // 动态生成查询条件:设置最小匹配长度 String selection = CALLER_ID_SELECTION.replace("+", PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)); + // 查询联系人数据库 Cursor cursor = context.getContentResolver().query( - Data.CONTENT_URI, - new String [] { Phone.DISPLAY_NAME }, - selection, + Data.CONTENT_URI, // 数据URI + new String [] { Phone.DISPLAY_NAME }, // 返回的列(仅需姓名) + selection, // 查询条件 new String[] { phoneNumber }, null);