为啥我需要 READ_CONTACTS 权限才能读取通话记录?

Posted

技术标签:

【中文标题】为啥我需要 READ_CONTACTS 权限才能读取通话记录?【英文标题】:Why do I need the permission READ_CONTACTS to read the call log?为什么我需要 READ_CONTACTS 权限才能读取通话记录? 【发布时间】:2014-09-23 02:11:28 【问题描述】:

应用正在读取通话记录。在大多数设备上都很好,其他一些设备会得到SecurityException 用于READ_CONTACTS(我没有也不想在我的androidManifest.xml 中使用它。

为什么会这样,我可以对此做些什么吗?也许通过投影,获取CACHED_NAME

【问题讨论】:

【参考方案1】:

android.permission.READ_CALL_LOG 是在 API 级别 16 中引入的。在此之前,它隐含在 android.permission.READ_CONTACTS 中,并且不作为单独的权限存在。我怀疑您的问题出在 API 15 及更低版本的设备上,因为它们会忽略您的清单的 uses-permissionREAD_CALL_LOG,因此无权读取日志。对于这些设备,READ_CONTACTS 是正确的权限。

【讨论】:

所以,我使用<uses-permission android:name="android.permission.READ_CONTACTS" android:maxSdkVersion="15" /> 来避免在较新的 API 中请求此权限。 刚刚尝试使用此权限和 maxSdkVersion="15" 上传我的 APK,控制台告诉我最小 maxSdkVersion 应该是 18!? 设置 maxSdkVersion 是一种不好的做法。有人更新了他们的手机,而您的应用程序不再运行,只是因为您没有按照应有的方式实现内容。 @Paul Ratazzi 如果我想看电话簿但不想看通话记录,我该怎么办? @dragonfly 如果您使用的是 API 16 或更高版本(我希望此时如此),只需在清单中声明 READ_CONTACTS 权限。 READ_CALL_LOGS 是一个单独的权限。

以上是关于为啥我需要 READ_CONTACTS 权限才能读取通话记录?的主要内容,如果未能解决你的问题,请参考以下文章

在 MIUI 中检查权限 READ_CONTACTS

Android 6.0 (Marshmallow) READ_CONTACTS 权限允许在权限被拒绝时读取联系人的姓名

android 6.0动态权限的申请

为啥 Apache + PHP 需要执行权限才能写入文件?

如何在没有 READ_CONTACTS 权限的情况下获取 Android 联系人详细信息

为啥 www-data 需要执行权限才能将上传的文件写入目录?