android-permissions - android 10及以上版本如何申请存储权限?

标签 android-permissions android-10.0 android-11 runtime-permissions android-storage

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

最佳答案

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

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

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

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

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

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

例如,如果你要写一个Image,那么你必须将它写在DCIM目录中,For Videos - 电影,For Document - 文档,等等。

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

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

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

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

关于android-permissions - android 10及以上版本如何申请存储权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67481842/

相关文章:

android - 具有不同签名的两个应用程序之间的自定义权限

android - 如何将图像保存到 Android Q 中的相机文件夹?

android - 如何使用 SAF 从树 URI 路径访问目录及其文件

Android Q - 在执行器上执行 AsyncTask 时出现 StackOverflowError

Android 11 媒体商店 - 无法在相对路径上录制新视频。它适用于 Environment.DIRECTORY_MOVIES 路径,但不适用于子文件夹

Android 11 URI 使用情况(文件 ://content://)

java - Android ACTION_CALL 不工作

android - Android Studio 中窗口类型 2002 的权限被拒绝

android - 用户和当前进程都没有 android.permission.USE_FINGERPRINT

android - 应用程序的 minSdkVersion 比设备 API 级别(android-R)更新