【问题标题】:Which permission do we need at runtime in android 6.0在 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中的危险权限列表
  • 绿巨人为你添加了列表。请添加必要的更改。

标签: android android-6.0-marshmallow audio-recording android-permissions


【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-08
        • 2015-12-18
        • 1970-01-01
        • 1970-01-01
        • 2014-08-28
        • 2012-04-08
        • 1970-01-01
        • 2015-12-28
        相关资源
        最近更新 更多