Xamarin.Forms应用程序需要写入共享的本地存储位置

时间:2018-02-06 00:46:09

标签: android xamarin.forms uwp storage shared

我正在编写 Xamarin.Forms 业务线应用程序。 该应用将以UWP和Android为目标。

我要求能够在本地存储上的共享文件夹中存储所拍摄的信息和图片。这样,同一设备在不同时间的多个用户可以恢复第一个用户的在制品。

我不确定我的选项是什么,因为我无法在public class ProtectArrayFromOverwrite { static int[][] data = new int[5][5]; static boolean[][] containsData = new boolean[5][5]; public static void main(String[] args) { // Try to write the value 10, to the cell [1][1] boolean didAdd = addData(1, 1, 10); System.out.println(didAdd); // True - the write worked // Try to write the value 20, to the cell [1][1] didAdd = addData(1, 1, 20); System.out.println(didAdd); // False - the cell already had a value } public static boolean addData(int x, int y, int value) { if (containsData[x][y] == false) { data[x][y] = value; containsData[x][y] = true; return true; } return false; } } 文件夹之外写作(对于UWP)。

我读到可能使用Picker并将所选文件夹存储在AppData中用于UWP,但我不确定它是否真的有用并且看起来很hacky,因为我需要想出一个方法来做以后适用于Android。

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

1 个答案:

答案 0 :(得分:2)

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

  

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

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

发布商缓存文件夹,但由于文档说明,此解决方案不适合您:

  

发布商缓存在当前用户的应用之间共享数据

所以我可能真的会选择你提出的基于选择器的解决方案。让用户使用FolderPicker选择要保存数据的文件夹,然后将所选文件夹存储到FutureAccessList。未来的访问列表是可靠的,甚至可以跟踪所选项目的更改(例如当用户将其移动到其他位置时)。以跨平台方式抽象选择过程可能会有点复杂,但应该可以将其隐藏在dependency service implementation之后。我的猜测将提供一个async方法来初始化目标位置。在UWP上,这将检查FutureAccessList如果之前选择了某个位置,如果不是,则会使用FolderPicker让用户选择它,然后将其存储给以后的用户。在Android上,它将以Android特定方式工作(我不确定那里有什么选项)。然后该服务将有一些文件操作方法,将使用该文件夹抽象特定于平台的操作(我认为您不能使用公共System.IO命名空间,因为您无法直接访问{{1}之外的用户选择的文件夹API)