You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin读取系统联系人列表信息时无法获取手机号问题求助

问题原因及修复方案

核心错误点

  • 手机号查询Uri使用错误
    ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI专门用于电话号码模糊检索场景,不支持直接按联系人ID查询关联号码,需替换为ContactsContract.CommonDataKinds.Phone.CONTENT_URI。
  • 缺少动态权限申请
    Android 6.0及以上版本中,仅在AndroidManifest.xml中静态声明android.permission.READ_CONTACTS权限无效,必须在触发联系人选择逻辑前动态申请该权限,否则仅能获取选择器返回的基础联系人ID、名称,无法读取关联的手机号字段。

修复后的代码段

替换cursor2的查询逻辑即可:

cursor2 = contentResolver.query(
    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, // 替换为正确的Uri
    null,
    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", // 改用占位符避免SQL注入风险
    arrayOf(contactId), // 占位符对应参数
    null
)

额外注意事项

  • 部分联系人可能绑定多个手机号,当前代码仅会保留最后一个遍历到的手机号,如有需要可改为用List存储所有号码
  • 注意处理cursor为空的边界情况,避免空指针异常

内容的提问来源于stack exchange,提问作者Enrico Cortinovis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:48:00