谷歌新权限政策下,Android设备通话记录与短信获取及代码变更咨询
谷歌新权限政策下的通话记录与短信权限问题解答
嘿,刚好之前踩过这个权限政策的坑,给你详细梳理下这两个问题:
1. 新政策后如何获取通话记录(Call Log)与短信(SMS)权限?
谷歌从Android 10(API 29)开始,就把CALL_LOG和SMS相关权限划为特殊敏感权限,不再允许应用随意申请。想要正常使用这些权限,得走两个关键步骤:
- 第一步,在
AndroidManifest.xml里依然需要声明对应的权限,比如:<uses-permission android:name="android.permission.READ_CALL_LOG" /> <uses-permission android:name="android.permission.READ_SMS" /> <!-- 按需添加WRITE_CALL_LOG、SEND_SMS等其他相关权限 --> - 第二步,必须通过谷歌Play Console提交权限申请审核。你得清晰说明应用使用这些权限的核心场景(比如通话备份、短信验证码自动填充这类合规场景,无关用途肯定过不了),还要提供应用内对应功能的截图、操作演示视频等证明材料。只有审核通过后,用户安装应用时,系统才会弹出权限请求对话框,你的应用才能真正获取到权限。
如果审核没通过,哪怕你在Manifest里声明了权限,调用相关API时也会直接抛出SecurityException,严重的话应用还可能被谷歌Play下架。
2. 代码是否需要变更,还是可沿用原有代码?
分两种情况来看:
- 如果你已经适配了Android 10及以上的权限请求逻辑(比如用
ActivityResultContracts.RequestPermission或者新版权限请求API),那核心的权限请求和数据读取代码基本可以沿用。但要注意:- 必须确保你的应用已经通过谷歌的权限审核,否则权限请求会直接失败,读取数据的代码也会报错。
- 针对Android 11(API 30)及以上,短信权限还有额外限制,比如不能随便使用
QUERY_ALL_PACKAGES权限读取其他应用的短信,得严格贴合合规场景。
- 如果你的代码还是用的Android 9及以下的旧权限请求方式(比如依赖
onRequestPermissionsResult回调),那需要适配新的Activity Result API——不过这是Android版本适配的要求,和谷歌的新权限政策本身无关。
简单来说:代码本身只要适配了目标Android版本就没问题,但权限审核是前提,没通过审核的话,再好的代码也拿不到权限。
内容的提问来源于stack exchange,提问作者Haresh Solanki




