在Android M中获得EXTERNAL_STORAGE所需的权限?

时间:2015-07-01 13:22:38

标签: android permissions android-6.0-marshmallow

Android权限ZWRITE_EXTERNAL_STORAGE会触发Android M的新授予权限对话框吗?

5 个答案:

答案 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:

  • 目标API级别< MNC。
  • 目标API级别= MNC,但您可以在目标API级别低于MNC的先前安装中升级设备上的应用。

否则,默认情况下,您会看到切换为OFF。

希望它有所帮助。

答案 3 :(得分:0)

根据文件:

  

安装时授予的有限权限:当用户安装或更新应用程序时,系统会向应用程序授予应用程序请求属于PROTECTION_NORMAL的所有权限。

因为READ_EXTERNAL_STORAGE属于PROTECTION_NORMAL,所以它不会触发对话框。

但是因为WRITE_EXTERNAL_STORAGE的级别是PROTECTION_DANGEROUS,所以它将属于docs所述的此行为:

  

用户在运行时授予权限:当应用程序请求权限时,系统会向用户显示一个对话框,然后调用应用程序的回调函数以通知它是否已授予权限。如果用户授予权限,则应用程序将获得该应用程序清单中声明的​​该权限的功能区域中的所有权限

以下是保护级别的来源:

detailed list

答案 4 :(得分:0)

根据Android docs,您无需请求有关读写外部存储的权限。

编辑:在最新的Android M版本中,您需要同时要求读取和写入权限