我正在编写 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。
非常感谢任何想法/指示!
答案 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)