为啥我需要 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-permission
行 READ_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 权限才能读取通话记录?的主要内容,如果未能解决你的问题,请参考以下文章
Android 6.0 (Marshmallow) READ_CONTACTS 权限允许在权限被拒绝时读取联系人的姓名