Xamarin.Forms Android文件交换,MTP

时间:2016-10-25 13:39:59

标签: android xamarin xamarin.forms usb mtp

我正在尝试在.Net桌面应用程序和Xamarin.Forms Android应用程序之间交换文件。我真的很难获得资源和帮助,所以我希望这个问题也包含一些内容 - 对于其他感兴趣的用户(不仅仅是Xamarin Forms)

到目前为止,我已经阅读了.Net C#中的文件和文件夹 Christophe Geers' BlogFun with MTP因为写作不适用于我的所有设备Windows File Stuff by Flauschig

在墙上的Xamarin.Forms方面,我首先偶然发现了Xamarin docA lib to store from pcl code以及Plugin.Permissions

通过以上所有这些来源,我能够在Android(三星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);
        }
    }

好的,现在提问: 由此方法创建的文件夹仅在我测试的一个设备上创建(概念证明) - 所有其他设备(例如Samsung A3,Android 6.0)没有任何反应(无助开发人员的证明)。 reboot不是解决方案。 同样在设备上也可以使用 - 按预期请求权限。其他设备上没有权限请求。

为什么在安装期间未创建所需的文件夹?似乎所有其他应用都有这样的文件夹' Android / data / com.exampledom.appname / files'。

我错过了什么?导入/导出到android似乎太难了。

1 个答案:

答案 0 :(得分:0)

@smack CreationCollisionOptions.OpenIfExists真的创建了一个文件夹吗?我不这么认为。是否没有CreateIfNotExists枚举?