Android权限Z
和WRITE_EXTERNAL_STORAGE
会触发Android M的新授予权限对话框吗?
答案 0 :(得分:10)
我同意Guillaume Perrot的回答。当我在READ_WRITE_EXTERNAL_STORAGE
AndroidManifest.xml
的权限时,我遇到了类似的问题
默认情况下,应用中没有权限显示,人们需要在应用权限中切换存储的切换按钮。然后我将targetSdkVersion
中的build.gradle
修改为小于{{1}和其他与23(MNC)
相关的号码,安装了权限的应用程序。
另一种方法是在需要许可的地方写sdkVersion
函数。代码如下:
requestpermission
因为我的声誉不到15,所以我不能投票支持Guillaume Perrot的答案。只需用这种方式来表达我的想法。
答案 1 :(得分:7)
如果检查Android M的版本
,我解决了这个问题 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
答案 2 :(得分:2)
我的回答是基于我使用模拟器对M Preview SDK第2版进行的测试。
如果您定位MNC
预览API级别,则默认情况下不会授予WRITE_EXTERNAL_STORAGE
,并且它将成为新动态权限API的一部分。
您会在设备设置的新应用权限菜单中看到存储权限作为切换按钮,您可以使用Activity.requestPermissions
显示该权限的弹出窗口。
但是,如果您的目标是api级别< MNC,它不会被归类为危险权限,因此将被授予用户禁用它的方式(不显示在权限设置中),并且您将无法使用{{1}编译代码无论如何,预览SDK强制Activity.requestPermissions
使用新的API。
这是与位置权限不同的行为:无论您定位的API级别如何,用户都可以在权限菜单中关闭位置。
对于权限菜单本身,默认情况下,权限切换状态为ON:
否则,默认情况下,您会看到切换为OFF。
希望它有所帮助。
答案 3 :(得分:0)
根据文件:
安装时授予的有限权限:当用户安装或更新应用程序时,系统会向应用程序授予应用程序请求属于PROTECTION_NORMAL的所有权限。
因为READ_EXTERNAL_STORAGE属于PROTECTION_NORMAL,所以它不会触发对话框。
但是因为WRITE_EXTERNAL_STORAGE的级别是PROTECTION_DANGEROUS,所以它将属于docs所述的此行为:
用户在运行时授予权限:当应用程序请求权限时,系统会向用户显示一个对话框,然后调用应用程序的回调函数以通知它是否已授予权限。如果用户授予权限,则应用程序将获得该应用程序清单中声明的该权限的功能区域中的所有权限
以下是保护级别的来源:
答案 4 :(得分:0)
根据Android docs,您无需请求有关读写外部存储的权限。
编辑:在最新的Android M版本中,您需要同时要求读取和写入权限