如何在android 10及以上版本中请求存储权限?

问题描述

谁能告诉在 android 10 及以上版本中如何要求用户授予存储权限。在这方面请指导我我使用了各种方法但都没有奏效!!!

解决方法

如果您想在外部存储中写入任何文件,那么您必须在 android 10 以下的应用中拥有 WRITE_EXTERNAL_STORAGE 权限。

在 android 10 中,您可以在清单的应用程序标签中使用 requestLegacyExternalStorage=true。它将为您提供在外部存储中的任何位置写入文件的访问权限。

但这是一个临时解决方案,因为它会在未来被移除。所以最好的解决方案是使用 SAF(存储访问框架)或 Scoped Storeage。

SAF:它是一个 Android 框架,用于保护用户的文件并帮助开发人员管理文件。但是,不同的 API 级别需要不同的方法来管理和访问文件。 API 级别越高,对开发者的限制就越多。

Scoped Storage:在您将应用更新为面向 Android 11 后,系统会忽略 requestLegacyExternalStorage 标志。因此,您必须使用 Scoped Storage 或 SAF 将任何文件写入存储。

使用范围存储,即使您具有写入存储权限,也无法在 android 11 的外部存储中写入任何文件。它将被忽略。您可以将文件写入应用的内部存储或与您正在写入的文件相关的媒体目录中。

比如,如果你要写一个Image,那么你必须把它写在DCIM目录下,For Videos - Movies,For Document - Documents,等等。

关于范围存储的最佳部分是您在 Android 10 及更高版本中不需要写存储权限,您仍然可以将文件写入其受尊重的目录中。如果您正在写入图像并且您的自定义目录未在存储中创建,则 android 将在写入文件时自动创建它。您不必执行file.mkdir()

但是如果您想在应用范围之外写入任何文件,那么您必须在 Playstore 上发布 apk 时阐明为什么需要这样做。

只有与文件操作相关的应用程序才能获得该批准,因为大多数应用程序不需要将文件写入外部存储中的范围之外。

因此,如果您在 android 10 或更高版本中写入文件,则只需不要请求写入权限,如果您使用的是作用域存储或 SAF,则只需请求读取存储权限。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...