【发布时间】:2016-10-25 13:39:59
【问题描述】:
我正在尝试在 .Net 桌面应用程序和 Xamarin.Forms Android 应用程序之间交换文件。我真的很难获得资源和帮助,所以我希望这个问题也能总结一些东西 - 对于其他感兴趣的用户(不仅仅是 Xamarin Forms)
到目前为止,我必须使用 .Net C# 读取文件和文件夹 Christophe Geers' Blog 和 Fun with MTP 并且因为在我的所有设备上都无法写入 Windows File Stuff by Flauschig
在 Xamarin.Forms 墙的一侧,我第一次偶然发现了 Xamarin doc 和 A lib to store from pcl code 以及 Plugin.Permissions。
通过以上所有这些资源,我能够在 Android(Samsung A5、Android 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、Android 6.0)都没有任何反应(无助开发人员的证明)。 reboot 不是解决方案。 同样在此工作的设备上 - 按预期请求权限。其他设备上没有权限请求。
为什么在安装过程中没有创建所需的文件夹?似乎所有其他应用程序都有这样一个文件夹“Android/data/com.exampledom.appname/files”。
我错过了什么?导入/导出到 android 似乎过于困难。
【问题讨论】:
-
再次:首先我想知道为什么在安装 apk 时没有创建结构(这在 android 上似乎是强制性的)?所有其他应用程序在“Android/data”下都有相应的文件夹我必须做什么才能做到这一点。任何帮助表示赞赏。
标签: android xamarin xamarin.forms usb mtp