Phi*_*p G 6 android android-intent android-contentprovider storage-access-framework
我希望 SAF 在指定文档中\xe2\x80\x9claunch 导航器(如果它是文件夹\xe2\x80\x9d)(他们在文档中这么称呼它)。
\n\n这不起作用,所以我还想知道是否可以将存储快捷方式添加到 SAF UI。请参阅此链接中的图片:https://i.stack.imgur.com/adINm.jpg
\n\n但我认为更有可能在特定文件夹中启动 SAF UI,因此我暂时可能会采用这种方法。我已经在 - 方法中尝试过onCreate(...):
String pathAsString = Environment.getExternalStorageDirectory() + "/myscientificapp/measurements/";\nFile pathAsFile = new File(pathAsString);\n\nif (pathAsFile.exists()) { Log.d(TAG, "pathAsFile exists!"); } //This is printed in Logcat\n\nandroid.net.Uri pathAsUri = Uri.fromFile(pathAsFile);\nIntent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);\nintent.addCategory(Intent.CATEGORY_OPENABLE);\nintent.setType("*/*");\nintent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, pathAsUri); //Does not make effect\nstartActivityForResult(intent, REQUEST_OPEN_DOCUMENT);\nRun Code Online (Sandbox Code Playgroud)\n\n问题是它不起作用..或者我不知道该怎么做。:/
\n\n我读过一些关于这些地方的内容。例如在Medium.com上,一位开发人员说:
\n\n\n\n\n当使用 ACTION_CREATE_DOCUMENT 选择保存文件的位置或打开文档时,新的 EXTRA_INITIAL_URI 允许您使用自己的自定义起始位置覆盖默认初始位置(用户选择的最后位置)。
\n
在 Android 文档中,我们可以阅读有关EXTRA_INITIAL_URI的信息:
\n\n\n\n\n调用者可以通过 DocumentsContract#EXTRA_INITIAL_URI 设置文档 URI 来指示文档导航器的初始位置。如果指定文档是文件夹,系统将尽力在指定文档中启动导航器;如果不是,则在包含指定文档的文件夹中启动导航器。
\n
我们还可以在DocumentsContract#EXTRA_INITIAL_URI中阅读相关内容:
\n\n\n\n\nEXTRA_INITIAL_URI
\n
\n ...
\n 设置显示文件选择器时用户可见的所需初始位置。
...
位置应指定文档 URI 或带有文档 ID 的树 URI。如果此 URI 标识非目录,文档导航器将尝试使用文档的父级作为初始位置。
如果缺少此额外内容或文档导航器无法找到所需的初始位置,则初始位置是系统特定的。
高度抽象语言的所有荣耀,但我想至少了解如何使用此功能的一些细节。
\n\n但在 Stackoverflow 上,一些开发人员告诉我们,它行不通。
\n\n有些话题还没有得到真正的回答。
\n\n所以根据一些消息来源,它应该有效。
\n\n有人知道如何在 SAF UI 中创建快捷方式(见图)吗?或者如何使 SAF \xe2\x80\x9 在指定文档中启动导航器(如果它是文件夹\xe2\x80\x9d,例如 ACTION_CREATE_DOCUMENT)?(如果我没记错的话,这些功能就存在于 Windows 95 中:> )
\n\n编辑:\n我删除了 git 项目的一些链接,因为最终“链接腐烂”正如 @A Jar of Clay 暗示的那样。
\n\n我也尝试将树 Uri (如 @CommonsWare 推荐)从 ACTION_OPEN_DOCUMENT_TREE 传递到方法上intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, pathAsTreeUri);。但 SAF 并没有从我作为 Uri 传递的位置开始。:(
亚历克斯·贝克的这个答案对我有用,我认为它也对你有用。
DocumentFile file = DocumentFile.fromTreeUri(context, uri);
intent.putExtra(EXTRA_INITIAL_URI, file.getUri());
Run Code Online (Sandbox Code Playgroud)
从 ACTION_OPEN_DOCUMENT_TREE 获得的 resultData.getData() 是您在 fromTreeUri() 中开始的 uri。
类似于“位置应指定文档 URI 或带有文档 ID 的树 URI”。“带有文档ID”似乎是必不可少的。我可以直接使用 ACTION_OPEN_DOCUMENT 中的 resultData.getData() 并且它有效。直接将 resultData.getData 与 ACTION_OPEN_DOCUMENT_TREE 一起使用不起作用,但在上述过程之后起作用。
不管怎样,对我有用,希望对你也有用。
| 归档时间: |
|
| 查看次数: |
3520 次 |
| 最近记录: |