android-permissions - 如何在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 存储或 SAF 将任何文件写入存储。
使用范围存储,即使您具有写入存储权限,您也无法在 android 11 的外部存储中写入任何文件。它将被忽略。您可以将文件写入应用程序的内部存储或与您正在写入的文件相关的媒体目录中。
例如,如果你要写一个图像,那么你必须把它写在 DCIM 目录,对于视频 - 电影,对于文档 - 文档等。
范围存储的最佳部分是您在 Android 10 及更高版本中不需要写入存储权限,您仍然可以将文件写入其受尊重的目录中。如果您正在写入图像并且您的自定义目录未在存储中创建,那么 android 将在写入文件时自动创建它。你不必这样做file.mkdir()
。
但是,如果您想在应用程序范围之外编写任何文件,那么您必须在 Playstore 上发布 apk 时说明为什么需要这样做。
并且只有与文件操作相关的应用程序才能获得该批准,因为大多数应用程序不需要在外部存储中写入超出其范围的文件。
因此,如果您在 android 10 或更高版本中写入文件,则根本不请求写入权限,如果您使用的是 Scoped 存储或 SAF,则仅请求读取存储权限。
推荐阅读
- javascript - 如果我要设置与给定查询字符串参数相关的日期,如何获得正确的星期几?
- javascript - 使用 Jest 和 Supertest 测试 React 时出现服务器导出问题
- javascript - Summernote:TextArea 不加载 SQL 数据,但文字可以
- javascript - 有没有一种方法可以在不确认 AWS Cognito 用户池中用户的账户状态的情况下验证电子邮件?
- html - 如何修复表格中的 CSS“空白:nowrap”?
- sql-server - 将多行合并为单个表上的一行
- vue.js - 如何使用 VueJS 在 Sweetalert2 中显示多个选择选项?
- amazon-web-services - 亚马逊 API:如何使用亚马逊的 MWS API 通过 ASIN 获取产品信息?
- c++ - 可以在c ++中以两种方式编写双指针吗?
- c# - 如何在 PictureBox 上绘制网格以保留其包含的图像?