在Android 6.0中,我们在运行时需要哪些权限?

5

我有一份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" />

然而,我的客户使用的是安卓6.0 (LG G5)报告应用程序无法正常运行。我没有LG G5来检查问题所在。依我看,我认为原因是权限从5.0变为了6.0。你能否检查我的权限并为安卓6.0提供一些改进或修正意见?或者我们有没有办法自动添加安卓6.0的权限。谢谢。


你是否已经针对API版本23进行了定位? - Ramit
是的。首先,我在Android 5.0(21~22)上进行了测试,没有问题。现在,我想更改目标API版本为23。 - Jame
WRITE_EXTERNAL_STORAGE是一项危险权限。请在https://developer.android.com/guide/topics/security/permissions.html中查看危险权限列表。 - Ramit
Hulk 为您添加了列表,请添加必要的更改。 - Ramit
6个回答

6
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

对于这些权限,你的目标SDK版本必须为23+,并且必须在Android 6.0+设备上向用户请求这些权限,使用checkSelfPermission()和requestPermissions()等方法。需要注意的是,你的应用程序需要有相应的元素。 如何请求权限的链接

谢谢。那么我需要的是通过编程请求权限。它会询问用户,然后自动为我的应用程序添加。对吗?当应用再次运行时,它会再次询问吗? - Jame
你好,user8430。这个问题涉及到列表,所以请先批准您的答案并开另一个问题询问如何请求权限,我会在那里帮助您,祝你好运,兄弟 :) - Yogesh Rathi
我给你的回答点赞。我不知道谁踩了它。 - Jame

5

我的问题的好链接 - Jame

1
在您的应用程序中,必须在运行时获取权限,而不是在应用程序安装时获取。根据文档,android.permission.WRITE_EXTERNAL_STORAGE是一项危险的权限,您可以查看6.0中的动态权限。请注意,保留HTML标签。

1
在Android Marshmallow中,权限管理与以前的版本完全不同。如果您的目标API为23,则必须请求用户允许应用程序使用此或那个权限。
请参阅: Android权限 我认为(未经测试),如果您设置API 22或更低,即使该应用安装在Android 6.0+设备上,也不会出现权限问题。

1
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

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

这些是危险权限,您需要在API 23+上运行时请求它们。
完整的危险权限列表可以在此处找到。
请查看开发者指南运行时请求权限

所以,我不需要在AndroidManifest.xml文件中添加上述两个权限。我应该在onCreate()函数中使用requestPermission()函数来添加这些权限。这样是正确的吗? - Jame
1
你需要在清单文件中声明它们,以便支持低版本的设备。不一定要在 onCreate() 方法中请求它们,只需在调用需要它们的任何函数之前请求即可。 - earthw0rmjim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接