我希望SAF“如果它是文件夹,则在指定文档中启动导航器”(正如他们在文档中所称)。

这不起作用,所以我也想知道是否可以将存储快捷方式添加到SAF UI。请参见此链接上的图片: https://i.imgur.com/yGtcGMM.jpg

但是我认为更有可能在特定文件夹中启动SAF UI,因此我暂时可能会采用这种方法。我已经在onCreate(...)方法中尝试过此方法:

String pathAsString = Environment.getExternalStorageDirectory() + "/myscientificapp/measurements/";
File pathAsFile = new File(pathAsString);

if (pathAsFile.exists()) { Log.d(TAG, "pathAsFile exists!"); } //This is printed in Logcat

android.net.Uri pathAsUri = Uri.fromFile(pathAsFile);
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, pathAsUri); //Does not make effect
startActivityForResult(intent, REQUEST_OPEN_DOCUMENT);


问题是它不起作用..或者我不知道该怎么做。 :/

我在这些地方读了一些。例如,在Medium.com处,开发人员说:


  使用ACTION_CREATE_DOCUMENT选择保存文件的位置或打开文档时,新的EXTRA_INITIAL_URI允许您使用自己的自定义起始位置覆盖默认的初始位置(用户选择的最后一个位置)。


在Android文档中,我们可以阅读有关EXTRA_INITIAL_URI的信息:


  调用者可以通过DocumentsContract#EXTRA_INITIAL_URI设置文档URI,以指示文档导航器的初始位置。如果是文件夹,则系统将尽最大努力在指定文档中启动导航器;如果不是,则系统将启动包含指定文档的文件夹。


我们也可以在DocumentsContract#EXTRA_INITIAL_URI上阅读它:


  EXTRA_INITIAL_URI
  ...
  设置显示文件选择器时用户可见的所需初始位置。...位置应指定文档URI或具有文档ID的树URI。如果此URI标识非目录,则文档导航器将尝试使用文档的父级作为初始位置。如果缺少此多余位置或文档导航器无法找到所需的初始位置,则初始位置是系统特定的。


高级抽象语言的所有辉煌之处,但我至少希望获得一些有关如何使用此功能的详细信息。

但是在Stackoverflow上,一些开发人员告诉我们it will not work

还有一些threads are not really answered yet

因此,根据一些消息来源,它应该可以工作。

谁知道如何在SAF UI中创建快捷方式(参见图片)?还是如何使用例如ACTION_CREATE_DOCUMENT来使SAF“在指定文档中启动导航器(如果它是文件夹)”? (如果我没记错的话,这些功能在Windows 95中就存在,例如:>)

编辑:
我删除了一些到git-project的链接,因为最终出现了@A Jar Clay提示的“ link-rot”。

我也确实尝试过将ACTION_OPEN_DOCUMENT_TREE的树Uri(按照@CommonsWare的建议)传递给方法intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, pathAsTreeUri);。但是SAF并不是从我作为Uri经过的位置开始的。 :(

最佳答案

亚历克斯·贝克(Alex Baker)的answer为我工作,我认为它也可以为您工作。

DocumentFile file = DocumentFile.fromTreeUri(context, uri);
intent.putExtra(EXTRA_INITIAL_URI, file.getUri());


从ACTION_OPEN_DOCUMENT_TREE获得的resultData.getData()是从fromTreeUri()开始的uri。

看起来像“位置应指定文档URI或带有文档ID的树URI”。 “带有文档ID”似乎是必不可少的。我可以直接使用ACTION_OPEN_DOCUMENT中的resultData.getData(),它可以正常工作。直接将resultData.getData与ACTION_OPEN_DOCUMENT_TREE结合使用是无效的,但是在上述过程之后有效。

无论如何,为我工作,希望它也对您有用。

关于android - 如何获得对Android SAF UI的更多控制权(例如ACTION_OPEN_DOCUMENT)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54257922/

10-11 15:26