【问题标题】:how to grant full Write/Read files access on specifics folder in android Q如何授予对android Q中特定文件夹的完整写入/读取文件访问权限
【发布时间】:2019-07-13 14:34:30
【问题描述】:

我注意到我在 Android Q 上的程序无法创建任何文件夹或保存和打开文件。
我已经阅读了谷歌的文档,但我没有找到答案或者至少我不明白因为有一个非常小的示例代码,而且我想通了,每次创建文件时,都需要打开一个特殊的窗口 谁能告诉我我怎样才能获得对 sdcard 中特殊文件夹的完全访问权限? 我不想每次都打开不同的窗口并确认它

【问题讨论】:

  • “特殊文件夹”是什么意思?
  • @CommonsWare 例如 /sdcard/test

标签: java android storage android-sdcard


【解决方案1】:

从长远来看,您无法强制用户授予您访问外部存储上的 test/ 目录的权限。

您有三个主要选择。

您可以使用getExternalFilesDir()getExternalCacheDir()getExternalMediaDir()。这些是Context 上的方法,它们每个都返回一个File,指向您拥有完全读写文件系统访问权限的外部存储上的一个目录。从用户的角度来看,这些将在Android/data/.../ 下,其中... 是您的应用程序ID。

或者,您可以使用ACTION_OPEN_DOCUMENT_TREE 和存储访问框架。将startActivityForResult()ACTION_OPEN_DOCUMENT_TREEIntent 一起使用将为您提供指向文档树的Uri,该文档树可能位于外部存储、可移动存储或云中。您可以在ContentResolver 上调用takePersistableUriPermission() 以获得对该树的长期访问权限,并且您可以使用DocumentFile.fromTreeUri() 来处理该树。然而,这不是文件系统访问——它更接近于使用 Web 服务器。

或者,您可以将android:requestLegacyExternalStorage="true" 添加到清单中的<application> 元素。这将为您提供 Android Q 设备上的旧文件系统行为。这计划在 Android R 中移除,因此这不是一个合适的长期解决方案。

我写了一篇关于今年 Android Q 存储变化的博客;这里是my last(?) post on it

【讨论】:

  • tnx 但 android:requestLegacyExternalStorage="true" 在我的应用程序中不起作用我会尝试 getExternalFilesDir
猜你喜欢
  • 2015-07-11
  • 1970-01-01
  • 2018-06-17
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 2012-08-15
相关资源
最近更新 更多