在 android 6.0 中我们在运行时需要哪些权限

Which permission do we need at runtime in android 6.0

我有一个 android 代码可以在 Android 5.0 版本上运行良好。我的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。你能看看我的许可并给我一些 improve/correct 它用于 Android 6.0 吗?或者我们有什么办法可以自动为 Android 6.0.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() 等方法。

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

这些是危险的权限,您需要在API级别23+.[=13的运行时请求它们=]

可以找到危险权限的完整列表 here

查看 Requesting Permissions at Run Time 上的开发人员指南。

<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

看看这对你有帮助

在您的应用程序中必须在 运行 时而不是在应用程序安装时获取权限。 根据文档,android.permission.WRITE_EXTERNAL_STORAGE 是一个危险的权限,您可以查看此 Dyanamic permission in 6.0

在Android Marshmallow 中,权限管理与以前的版本完全不同。如果您的目标是 API 23,您将必须请求用户允许来自该应用的这个或那个权限。

看看: Android permissions

我认为(未测试)如果您将 API 设置为 22 或更少,您将不会遇到权限问题,尽管该应用安装在 Android 6.0+[= 的设备中11=]

Android 6 改进了 android 处理应用程序权限的方式,如果您的应用程序需要危险权限(此处为完整列表 https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous),您需要检查该权限运行时,因此在清单中定义权限是不够的。 这种新权限管理的原因与 android 用户可以 enable/disable 应用程序权限运行时有关,因此您的代码需要注意默认情况下不授予特定功能(相机、gps 等)并且可能会随着时间而改变。

有很多库可以帮助您管理应用程序权限,我认为使用最多的是 Permissions Dispatcher:https://github.com/hotchemi/PermissionsDispatcher

也可以在这里查看官方文档:https://developer.android.com/training/permissions/requesting.html