如何解决Intent.ACTION_OPEN_DOCUMENT 和应用私有文件
我正在努力将我的应用程序转移到范围存储。该应用程序的一项功能是它包含存储为应用程序资产的文档模板。在运行时,它们被复制到本地存储,这里:(代码为Java)
String path = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS)
.getAbsolutePath() +
File.separator + "Templates";
由于这些文件是应用程序私有的,我很高兴将它们放入
String path = context.getFilesDir()
.getAbsolutePath() +
File.separator + "Templates";
但我也计划为用户浏览文件执行此操作(或类似操作):
Intent newIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
newIntent.addCategory(Intent.CATEGORY_OPENABLE);
newIntent.setType("*/*");
startActivityForResult(newIntent,0);
我的问题是,如何让 ACTION_OPEN_DOCUMENT 将我放置模板的位置包含为可浏览的位置?
解决方法
在系统文件选择器中从您的应用程序公开私人文件的唯一方法是create a custom DocumentsProvider
。这会将您的应用添加为用户可以选择的文件源。
请注意,使用这种方法,根本不需要将文件复制到本地存储 - 您的 opening a document 代码可以使用 AssetManager
的 openFd()
方法以及 {{3 }} 直接将其传递给调用应用程序,而无需通过 File
API。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。