Xamarin.Forms Android无法访问USB OTG文件夹

时间:2018-01-09 18:13:40

标签: android xamarin.forms storage unauthorized usb-otg

我在Android 5.0设备上,通过USB OTG线缆将“usb海量存储”安装在“/ storage / usbotg”。 不幸的是,从我的应用程序我只有该文件夹的读取权限。请注意,我设置了写入外部存储权限,因为我可以写入设备存储。

我发布以下代码作为参考:

string Root = "/storage/usbotg";                        
string[] Dirs = Directory.GetDirectories(Root);

string NewFolder = Path.Combine(Root, "NewFolder");          
Directory.CreateDirectory(NewFolder);

这在最后一行给了我一个例外(但我可以在Dirs中列出子目录)

例外: System.UnauthorizedAccessException的

异常消息: 访问路径“/ storage / usbotg / NewFolder”被拒绝。

如果我使用:

string Root =  "/storage/emulated/0"; 

一切正常,并且创建了“NewFolder”。

我缺少什么?如何写入该文件夹?

我正在使用Xamarin.Forms 2.5.0

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

使用文件系统访问应用程序的私有存储空间之外的数据受每个Android版本的限制。

推荐的选项是:

  • 使用getExternalFilesDirs()getExternalCacheDirs,...:这将为您提供一个或多个特定于您的应用程序的目录(通常是以程序包名称命名的目录)。这不适用于可移动媒体,除非它们被采用。

  • 使用存储访问框架:请用户(使用ACTION_OPEN_DOCUMENT_TREE)选择存储根目录。然后,您可以通过SAF API管理所选目录的内容。您可以persist the permission,因此您只需要询问用户一次。似乎获得写入权限是what ES File explore does

Mark Murphy(又多)detailed explanation