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

Xamarin.Forms Android cannot access USB OTG folder

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

我post以下代码作为参考:

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

感谢您的帮助

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

推荐的选项是:

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

  • 使用存储访问框架:询问用户(使用ACTION_OPEN_DOCUMENT_TREE) to choose the storage root. You can then manage the content of the picked directory through the SAF API. You can persist the permission, so you only need to ask the user once. It seems that it is 获得写入权限。

Mark Murphy 的(更多)detailed explanation