如何在android Q中的specifics文件夹上授予完全的写入/读取文件访问权限

时间:2019-07-13 14:34:30

标签: java android storage android-sdcard

我注意到我在Android Q上的程序无法创建任何文件夹或保存并打开文件。
我已经阅读过Google的文档,但没有找到答案,或者至少我不理解,因为其中有非常小的示例代码,并且据我了解,每次创建文件时,都需要打开一个特殊的窗口< br /> 有人可以告诉我如何获得对SD卡中特殊文件夹的完整访问权限? 我不想每次都打开一个不同的窗口并确认

1 个答案:

答案 0 :(得分:1)

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

您有三个主要选择。

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

或者,您可以使用ACTION_OPEN_DOCUMENT_TREE和Storage Access Framework。将startActivityForResult()ACTION_OPEN_DOCUMENT_TREE Intent结合使用会给您Uri指向文档树,该文档树可能位于外部存储,可移动存储或云中。您可以在takePersistableUriPermission()上调用ContentResolver以获取对该树的长期访问,并且可以使用DocumentFile.fromTreeUri()与该树配合使用。但是,这不是文件系统访问-距离使用Web服务器有点接近。

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

我在博客中谈到了今年Android Q存储的巨大变化;这里是my last(?) post on it