【问题标题】:Xamarin.Forms Android File Exchange, MTPXamarin.Forms Android 文件交换,MTP
【发布时间】:2016-10-25 13:39:59
【问题描述】:

我正在尝试在 .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(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


【解决方案1】:

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

【讨论】:

  • 方法称为“CreateFolderAsync”。它确实创建文件夹。它也适用于一部手机。
猜你喜欢
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多