使用Intent.ActionOpenDocumentTree时,可以允许用户保存在设备附近的位置吗?

时间:2018-06-22 03:50:03

标签: android xamarin.android savefiledialog

这是一个Xamarin项目,但我认为代码大多只是包装android sdk。当我选择一个文件时,会使用/获取该文件:

var intent = new Intent(Intent.ActionGetContent);
intent.AddCategory (Intent.CategoryOpenable);
StartActivityForResult (Intent.CreateChooser (intent, "Select file"), 0);

enter image description here

注意如何从远程位置打开它。但是当尝试选择目录时,我使用/得到了这个:

// https://stackoverflow.com/questions/27889377/action-open-document-tree-only-returns-empty-recent-folder
var intent = new Intent(Intent.ActionOpenDocumentTree);
intent.PutExtra("android.content.extra.SHOW_ADVANCED", true);
intent.PutExtra("android.content.extra.FANCY", true);
intent.PutExtra("android.content.extra.SHOW_FILESIZE", true);
StartActivityForResult (Intent.CreateChooser (intent, "Select Save Location"), 0);

enter image description here

我错过了什么吗?还是没有办法做到这一点?例如,当选择保存位置时,我希望用户可以选择“ Prime Photos”(如果有)。

3 个答案:

答案 0 :(得分:1)

您必须设置文档的模仿类型。

> public void performFileSearch() {
> 
>     // ACTION_OPEN_DOCUMENT is the intent to choose a file via the system's file
>     // browser.
>     Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
> 
>     // Filter to only show results that can be "opened", such as a
>     // file (as opposed to a list of contacts or timezones)
>     intent.addCategory(Intent.CATEGORY_OPENABLE);
> 
>     // Filter to show only images, using the image MIME data type.
>     // If one wanted to search for ogg vorbis files, the type would be "audio/ogg".
>     // To search for all documents available via installed storage providers,
>     // it would be "*/*".
>     intent.setType("image/*");
> 
>     startActivityForResult(intent, READ_REQUEST_CODE); }

答案 1 :(得分:1)

这些意图使用不同的API

  • ACTION_GET_CONTENT是较早的版本(自API级别1起)。

  • ACTION_OPEN_DOCUMENT_TREE是API级别19中引入的Storage Access Framework的一部分。不幸的是,我认识的任何SAF提供程序均不支持此意图,而Google Drive也不支持。据我所知,它仅用于访问本地存储(android.content.extra.SHOW_ADVANCED是显示内部存储根目录的未记录额外内容)

尽管SAF实施得还不如人们希望的那样广泛,但它仍然可以使用。您可以使用:

有关更多详细信息,请参见Open files using storage access framework

答案 2 :(得分:0)

要让Xamarin在android设备中选择目录,您可以简单地使用PortableStorage,这是我的项目之一。它通过SAF使用ACTION_OPEN_DOCUMENT_TREE并完全满足您的需求。 https://github.com/madnik7/PortableStorage