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