2016-10-25 26 views
0

我試圖在.Net桌面應用程序和Xamarin.Forms Android應用程序之間交換文件。我真的很難獲得資源和幫助,所以我想要這個問題也包裝一些東西了 - 對於其他感興趣的用戶(不僅是Xamarin Forms)Xamarin.Forms Android文件交換,MTP

到目前爲止,我必須閱讀.Net C#中的文件和文件夾 Christophe Geers' BlogFun with MTP因爲寫作沒有在我所有的設備Windows File Stuff by Flauschig

的工作,在這堵牆的Xamarin.Forms身邊,我第一次絆倒Xamarin docA lib to store from pcl codePlugin.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); 
     } 
    } 

好了,現在的問題是: 被此方法創建只有我測試了一個設備(概念驗證)上創建的文件夾 - 所有其他(如三星A3,在Android 6.0)沒有任何反應(無助開發者的證明)。 A reboot不是解決方案。 也在設備上工作 - 按預期請求權限。其他設備上沒有權限請求。

爲什麼在安裝過程中沒有創建所需的文件夾?似乎所有其他應用程序確實有這樣一個文件夾「Android/data/com.exampledom.appname/files」。

我缺少什麼?它似乎很難導入/導出到android。

+0

再次:首先,我想要一些爲什麼在安裝apk時不會創建結構(這在android中似乎是必需的)?所有其他應用程序確實在'Android/data'下有相應的文件夾。我必須做些什麼來實現這一點。任何幫助讚賞。 – smack

回答

0

@smack CreationCollisionOptions.OpenIfExists是否真的創建一個文件夾?我不這麼認爲。有沒有CreateIfNotExists枚舉?

+0

方法被稱爲'CreateFolderAsync'。它確實創建文件夾。它也適用於一部手機。 – smack