【问题标题】:Xamarin.Forms app need to write to a shared local storage locationXamarin.Forms 应用需要写入共享的本地存储位置
【发布时间】:2018-07-15 23:19:53
【问题描述】:

我正在编写 Xamarin.Forms 业务线应用程序。 该应用将面向 UWP 和 Android。

我需要能够将拍摄的信息和照片存储在本地存储的共享文件夹中。这样,同一设备的多个用户在不同时间可以恢复第一个用户正在进行的工作。

我不确定我的选择是什么,因为我无法在AppData 文件夹之外写入内容(对于 UWP)。

我阅读了有关可能使用 Picker 并将所选文件夹存储在 FutureAccessList 中的 UWP 的信息,但我不确定它是否真的可以工作并且看起来很笨拙,因为我需要想出一种方法来为 UWP 做同样的事情Android 稍后发布。

非常感谢任何想法/指针!

【问题讨论】:

  • 这与跨应用程序通信无关。我的情况是:同一设备的多个用户在不同时间需要访问可能已被其他用户捕获的本地数据。如:用户 A 开始报告,为项目拍照,然后回家。用户 B 在第二个班次中使用相同的设备并在用户 A 离开的地方继续使用。
  • 我之前通过组策略尝试过第一个选项,仅此一项对我不起作用。不知道第二个选项...现在试一试并报告。
  • 好的,我刚刚检查过了,通过 GP 设置值实际上设置了注册表项,即选项 #2。 :(

标签: android xamarin.forms uwp storage shared


【解决方案1】:

有一个特殊的ApplicationData.SharedLocalFolder folder 允许您在 PC 上的用户帐户之间共享应用数据。它的主要限制是它需要适当的组策略:

SharedLocalFolder 仅在设备具有适当的组策略时可用。如果未启用组策略,则设备管理员必须启用它。在本地组策略编辑器中,导航到计算机配置\管理模板\Windows 组件\应用程序包部署,然后将“允许 Windows 应用程序在用户之间共享应用程序数据”设置更改为“启用”。

我觉得默认情况下不允许这样做是这个 API 有用性的一个很大障碍。

有一个发布者缓存文件夹,但是这个解决方案不适合你,因为文档说:

发布者缓存为当前用户跨应用共享数据

所以我可能真的会采用您提出的基于选择器的解决方案。让用户选择一个文件夹以使用FolderPicker 保存数据,然后将所选文件夹存储到FutureAccessList。未来的访问列表是可靠的,甚至可以跟踪所选项目的变化(比如当用户将其移动到不同的位置时)。以跨平台的方式对选择过程的抽象可能会稍微复杂一些,但应该可以将其隐藏在dependency service implementation 后面。我的猜测将提供一个async 方法来初始化目标位置。在 UWP 上,这将检查 FutureAccessList 是否先前选择了一个位置,如果没有,它将使用 FolderPicker 让用户选择它并将其存储以供以后的用户使用。在 Android 上,它将以特定于 Android 的方式工作(我不确定那里有哪些选项)。然后该服务将具有一些文件操作方法,这些方法将抽象特定于平台的文件夹操作(我认为您不能使用常见的System.IO 命名空间,因为您不能直接访问StorageFolder API 之外的用户选择的文件夹)

【讨论】:

  • 嗨,马丁,感谢您抽出宝贵的时间来研究这个问题。这将是特定于平台的实现,即使不是不可能,也很难利用共享的跨平台代码,尤其是插件。我希望 Xamarin.Forms 中存在/存在与平台无关的抽象,可以提供必要的功能。
  • 您仍然可以跨平台使用文件的内容,您是否缺少特定的功能?
  • 您还可以使用OpenStreamForReadAsync 方法从StorageFile 获取System.IO.Stream
  • 用户会对被评估的项目拍照。我打算用MediaPlugin 拍照。我相信它需要相对于应用程序安装路径的目录,或者允许保存在相机胶卷(相册)中。为了让我将图像保留在共享文件夹中,我可能必须先存储在相册中,获取流,然后将其保存在共享文件夹中,然后从相册中删除。这看起来真的很“hacky”,我试图避免这种情况。 :(
猜你喜欢
  • 2019-02-14
  • 2022-08-10
  • 2019-05-19
  • 2017-05-16
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 2010-11-28
  • 2018-08-04
相关资源
最近更新 更多