在 android 6.0 运行时我们需要哪些权限
Posted
技术标签:
【中文标题】在 android 6.0 运行时我们需要哪些权限【英文标题】:Which permission do we need at runtime in android 6.0 【发布时间】:2016-12-22 17:21:50 【问题描述】:我有一个可以在 android 5.0 版本上正常运行的 android 代码。我的AndroidManifest.xml
是
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
但是,我使用 Android 6.0 (LG G5) 的客户报告说该应用程序无法正常运行。我没有 LG G5 来检查问题所在。在我看来,我认为原因是权限从 5.0 更改为 6.0。您能否查看我的许可并针对 Android 6.0 进行一些改进/纠正?或者我们有什么方法可以自动为 Android 6.0 添加权限。谢谢大家
【问题讨论】:
您是否针对 api 版本 23 ? 是的。首先,我在Android 5.0(21~22)上测试过,没有问题。现在,我想更改目标 API 版本 23 WRITE_EXTERNAL_STORAGE 是一个危险的权限。请查看developer.android.com/guide/topics/security/permissions.html中的危险权限列表 绿巨人为你添加了列表。请添加必要的更改。 【参考方案1】:在Android 6.0 中,这包括:
ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION
ADD_VOICEMAIL
BODY_SENSORS
CALL_PHONE
CAMERA
GET_ACCOUNTS
PROCESS_OUTGOING_CALLS
READ_CALENDAR
READ_CALL_LOG
READ_CELL_BROADCASTS
READ_CONTACTS
READ_EXTERNAL_STORAGE
READ_PHONE_STATE
READ_SMS
RECEIVE_MMS
RECEIVE_SMS
RECEIVE_WAP_PUSH
RECORD_AUDIO
SEND_SMS
USE_SIP
WRITE_CALENDAR
WRITE_CALL_LOG
WRITE_CONTACTS
WRITE_EXTERNAL_STORAGE
对于这些权限,不仅您的 targetSdkVersion 23+ 应用需要具有元素,而且您还必须在运行时向 Android 6.0+ 设备上的用户请求这些权限,使用方法如 checkSelfPermission()和 requestPermissions()。
How to ask permission link
【讨论】:
谢谢。所以我需要的是通过编程请求权限。它会询问用户,然后自动为我的应用添加。这样对吗?再次运行应用时是否会询问第二次? 你好 user8430,这个问题是关于列表的,所以首先批准你回答并打开另一个关于如何请求权限的问题,我会帮你的,祝你好运:) 我赞成你的回答。我不知道谁反对它【参考方案2】:<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这些是危险权限,您需要在运行时在 API 级别 23+ 上请求它们。
完整的危险权限列表见here。
查看Requesting Permissions at Run Time 上的开发人员指南。
【讨论】:
因此,不要在AndroidManifest.xml
文件中添加上述两个权限。我必须使用 requestPermission() 函数来添加这些权限 onCreate() 函数。对吗?
对于 API 级别较低的设备,您还需要在清单中包含它们。在onCreate()
中请求它们不是强制性的,只需在调用任何需要它们的函数之前请求它们。【参考方案3】:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这些权限将是您应用中的运行时权限
更多信息:
https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en
看看这对你有帮助
【讨论】:
我的问题的好链接【参考方案4】:在您的应用程序中,必须在运行时而不是在应用程序安装时获取权限。
根据文档,android.permission.WRITE_EXTERNAL_STORAGE
是一个危险的权限,您可以查看此Dyanamic permission in 6.0
【讨论】:
【参考方案5】:在 Android Marshmallow 中,权限管理与以前的版本完全不同。如果您以 API 23 为目标,则必须请求用户允许该应用授予此或该权限。
看看: Android permissions
我认为(未经测试)如果您将 API 设置为 22 或更低,尽管该应用程序安装在 Android 6.0+ 的设备中,但您不会遇到权限问题
【讨论】:
【参考方案6】:Android 6 改进了 android 处理应用权限的方式,如果您的应用需要危险权限(此处为完整列表 https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous),您需要检查权限运行时,因此在清单中定义权限是不够的。 这种新权限管理的原因与 android 用户可以启用/禁用应用程序权限运行时这一事实有关,因此您的代码需要注意默认情况下不授予特定功能(相机、gps 等)并且可能会随着时间而改变。
帮助管理应用权限的库有很多,我觉得用的最多的是Permissions Dispatcher:https://github.com/hotchemi/PermissionsDispatcher
也可以在这里查看官方文档:https://developer.android.com/training/permissions/requesting.html
【讨论】:
以上是关于在 android 6.0 运行时我们需要哪些权限的主要内容,如果未能解决你的问题,请参考以下文章