From da6f4022fef7d61ce064722261fb6cfdba9f4304 Mon Sep 17 00:00:00 2001 From: zhangqing <1770666340@qq.com> Date: Tue, 23 Dec 2025 23:26:48 +0800 Subject: [PATCH] 1 --- .../src/net/micode/notes/data/Contact.java | 65 ++++++++++--------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/src/小米标签代码/src/net/micode/notes/data/Contact.java b/src/小米标签代码/src/net/micode/notes/data/Contact.java index 3fbcf98..f3ea014 100644 --- a/src/小米标签代码/src/net/micode/notes/data/Contact.java +++ b/src/小米标签代码/src/net/micode/notes/data/Contact.java @@ -14,24 +14,23 @@ * limitations under the License. */ -package net.micode.notes.data; +package net.micode.notes.data; // 包声明 -import android.content.Context; -import android.database.Cursor; -import android.provider.ContactsContract.CommonDataKinds.Phone; -import android.provider.ContactsContract.Data; -import android.telephony.PhoneNumberUtils; -import android.util.Log; +import android.content.Context; // 导入上下文类 +import android.database.Cursor; // 导入数据库游标类 +import android.provider.ContactsContract.CommonDataKinds.Phone; // 导入联系人电话相关类 +import android.provider.ContactsContract.Data; // 导入联系人数据相关类 +import android.telephony.PhoneNumberUtils; // 导入电话号码工具类 +import android.util.Log; // 导入日志类 -import java.util.HashMap; +import java.util.HashMap; // 导入HashMap类,用于缓存联系人信息 /** * 联系人工具类 * 用于根据电话号码获取联系人姓名 */ public class Contact { - - // 联系人缓存,用于提高查询效率 + // 联系人缓存,使用HashMap存储电话号码到联系人姓名的映射,提高查询效率 private static HashMap sContactCache; // 日志标签 @@ -40,59 +39,63 @@ public class Contact { /** * 查询来电者ID的选择语句 * 用于在联系人数据库中匹配电话号码 + * 使用PHONE_NUMBERS_EQUAL函数进行电话号码匹配 */ - private static final String CALLER_ID_SELECTION = "PHONE_NUMBERS_EQUAL(" + Phone.NUMBER - + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'" - + " AND " + Data.RAW_CONTACT_ID + " IN " - + "(SELECT raw_contact_id " - + " FROM phone_lookup" - + " WHERE min_match = '+')"; + private static final String CALLER_ID_SELECTION = "PHONE_NUMBERS_EQUAL(" + Phone.NUMBER // 电话号码相等比较 + + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'" // MIME类型为电话类型 + + " AND " + Data.RAW_CONTACT_ID + " IN " // 原始联系人ID在子查询中 + + "(SELECT raw_contact_id " // 子查询开始 + + " FROM phone_lookup" // 从电话查找表 + + " WHERE min_match = '+')"; // 最小匹配条件 /** * 根据电话号码获取联系人姓名 * 先查询缓存,如果缓存中没有则查询联系人数据库 - * @param context 应用上下文 + * @param context 应用上下文,用于访问内容解析器 * @param phoneNumber 电话号码 * @return 联系人姓名,如果找不到则返回null */ public static String getContact(Context context, String phoneNumber) { // 如果缓存为空,则初始化缓存 if(sContactCache == null) { - sContactCache = new HashMap(); + sContactCache = new HashMap(); // 创建新的HashMap } - // 先从缓存中查找 + // 先从缓存中查找,如果找到则直接返回 if(sContactCache.containsKey(phoneNumber)) { return sContactCache.get(phoneNumber); // 返回缓存中的姓名 } // 构建查询条件:替换选择语句中的'+'为最小匹配数 - String selection = CALLER_ID_SELECTION.replace("+", - PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)); + // PhoneNumberUtils.toCallerIDMinMatch将电话号码转换为最小匹配格式 + String selection = CALLER_ID_SELECTION.replace("+", // 替换占位符 + PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)); // 获取电话号码的最小匹配格式 // 查询联系人数据库 Cursor cursor = context.getContentResolver().query( - Data.CONTENT_URI, // 查询URI - new String [] { Phone.DISPLAY_NAME }, // 要返回的列:显示名称 - selection, // 选择条件 - new String[] { phoneNumber }, // 选择参数:电话号码 - null); // 排序方式(无) + Data.CONTENT_URI, // 查询URI:联系人数据URI + new String [] { Phone.DISPLAY_NAME }, // 要返回的列:显示名称 + selection, // 选择条件 + new String[] { phoneNumber }, // 选择参数:电话号码 + null); // 排序方式(无) // 处理查询结果 - if (cursor != null && cursor.moveToFirst()) { + if (cursor != null && cursor.moveToFirst()) { // 如果游标不为空且有数据 try { - String name = cursor.getString(0); // 获取第一列的显示名称 - sContactCache.put(phoneNumber, name); // 存入缓存 + String name = cursor.getString(0); // 获取第一列的显示名称(索引0) + sContactCache.put(phoneNumber, name); // 将结果存入缓存 return name; // 返回姓名 } catch (IndexOutOfBoundsException e) { + // 处理数组越界异常 Log.e(TAG, " Cursor get string error " + e.toString()); // 记录错误日志 return null; // 发生异常时返回null } finally { - cursor.close(); // 确保关闭游标 + cursor.close(); // 确保关闭游标,释放资源 } } else { + // 没有找到匹配的联系人 Log.d(TAG, "No contact matched with number:" + phoneNumber); // 记录调试日志 - return null; // 没有匹配的联系人,返回null + return null; // 返回null } } } \ No newline at end of file