10

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

4

6 回答 6

10

我同意 Guillaume Perrot 的回答。当我写 in 的权限时,我遇到了类似的READ_WRITE_EXTERNAL_STORAGE问题AndroidManifest.xml

默认情况下,应用程序中没有显示权限,人们需要在应用程序权限中切换存储的切换按钮。然后我将我targetSdkVersion的输入修改build.gradle为小于23(MNC)和其他相关的数字sdkVersion,安装的应用程序具有权限。

另一种方法是requestpermission在需要许可的地方编写函数。代码如下:

 if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)==
    PackageManager.PERMISSION_GRANTED) {
    //do the things} else {
    requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE },
      AnyNumber);

因为我的声望不到 15,所以我不能投票给 Guillaume Perrot 的答案。就用这种方式来表达我的想法。

于 2015-10-15T03:07:40.943 回答
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);
            }
于 2016-10-12T15:53:45.543 回答
2

我的答案是基于我使用模拟器对 M Preview SDK 版本 2 进行的测试。

如果您以MNC预览 API 级别为目标,WRITE_EXTERNAL_STORAGE则默认情况下不授予,并且将成为新动态权限 API 的一部分。

您将在设备设置的新应用权限菜单中看到存储权限作为切换按钮,您可以使用它Activity.requestPermissions来显示该权限的弹出窗口。

但是,如果您的目标 api 级别 < MNC,它不会被归类为危险权限,因此将被授予而用户无法禁用它(未显示在权限设置中),您将无法无论如何编译代码Activity.requestPermissions,因为预览版 SDK 强制minSdkVersion="MNC"使用新的 API。

这是与位置权限不同的行为:无论您定位的 API 级别是什么,用户都可以在权限菜单中关闭位置。

对于权限菜单本身,在以下情况下,权限切换状态默认为 ON:

  • 目标 API 级别 < MNC。
  • 目标 API 级别 = MNC,但您从先前安装的设备上升级应用程序,其中目标 API 级别低于 MNC。

否则,默认情况下您将看到切换为关闭。

希望能帮助到你。

于 2015-08-11T02:50:46.970 回答
0

根据文档:

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

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

但是因为 WRITE_EXTERNAL_STORAGE 的级别是 PROTECTION_DANGEROUS,它将属于文档中描述的这种行为:

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

以下是保护级别的来源:

详细清单

于 2015-07-02T05:18:24.690 回答
0

根据Android 文档,您不需要请求有关读取和写入外部存储的权限。

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

于 2015-07-02T16:49:37.283 回答
0

存储权限属于危险保护级别,因此如果App target SDK设置为23,则在Android M中安装时不会授予所有危险保护级别权限。它们将在运行时授予。是的,这些权限也可以在运行时撤销。

不会自动触发无权限对话框,您需要使用 API(例如 requestPermissions() 方法)发出请求以显示该原生对话框。

请在此处查看危险级别权限列表

于 2015-09-20T19:08:59.433 回答