我正在尝试在安卓桌面应用和Xamarin.Forms .Net应用之间交换文件。我真的很难获得资源和帮助,所以我希望这个问题也能总结一些东西-给其他感兴趣的用户(不仅仅是Xamarin表单)
到目前为止,我已经使用Christophe Geers' Blog和Fun with MTP读取了.Net C#中的文件和文件夹,因为在我的所有设备Windows File Stuff by Flauschig上都不能写入
在墙的一侧,我第一次偶然发现了Xamarin doc和A lib to store from pcl code,还有Plugin.Permissions。
有了上面所有这些资源,我就能够在安卓(三星A5,安卓6.0)上进行阅读和写作了。对于this description on filestructure,我认为下面的代码总是会得到一个有效的路径:
public string GetExternalFolder()
{
GetPermission();
var externalFolder = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, "Android", "data", "com.exampledom.appname", "files");
if (!Directory.Exists(externalFolder))
CreateFolderStructure();
return externalFolder;
}GetPermission()取自Plugin.Permissions,如果没有权限就会抛出异常。
CreateFolderStructure()使用的是pcl.storage --看起来像这样。
private async void CreateFolderStructure()
{
try
{
IFolder rootFolder = await FileSystem.Current.GetFolderFromPathAsync(Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path));
var subpaths = new[] {"Android", "data", "com.exampledom.appname", "files"};
foreach (var dir in subpaths)
{
if (!string.IsNullOrEmpty(dir))
rootFolder = await rootFolder.CreateFolderAsync(dir, CreationCollisionOption.OpenIfExists);
}
Log("Folder structure created!");
}
catch (Exception e)
{
Log("Folder structure cannot be created!");
Console.WriteLine("Failed to log! " + e.Message);
}
}好的,现在问题来了:通过这种方法创建的文件夹只在我测试过的一台设备上创建(概念证明)-所有其他设备(例如三星A3,安卓6.0)什么都不会发生(证明无助的开发人员)。reboot不是解决方案。在工作的设备上也是如此-如预期的那样请求权限。其他设备上没有权限请求。
为什么在安装过程中没有创建所需的文件夹?似乎所有其他应用程序都有这样一个文件夹‘Android/data/com.exampolom.appname/files’。
我遗漏了什么?导入/导出到android似乎太难了。
发布于 2016-10-25 21:50:13
@smack CreationCollisionOptions.OpenIfExists真的创建了一个文件夹吗?我不这样认为。有没有CreateIfNotExists枚举?
https://stackoverflow.com/questions/40241597
复制相似问题