问题描述
我正在努力将我的应用程序转移到范围存储。该应用程序的一项功能是它包含存储为应用程序资产的文档模板。在运行时,它们被复制到本地存储,这里:(代码为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。