这是一个Xamarin项目,但我认为代码大多只是包装android sdk。当我选择一个文件时,会使用/获取该文件:
var intent = new Intent(Intent.ActionGetContent);
intent.AddCategory (Intent.CategoryOpenable);
StartActivityForResult (Intent.CreateChooser (intent, "Select file"), 0);
注意如何从远程位置打开它。但是当尝试选择目录时,我使用/得到了这个:
// 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);
我错过了什么吗?还是没有办法做到这一点?例如,当选择保存位置时,我希望用户可以选择“ Prime Photos”(如果有)。
答案 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