2016-10-25 18 views
0

.Net Desktop AppとXamarin.Forms Androidアプリの間でファイルを交換しようとしています。私は本当にリソースを手に入れることができませんでしたので、この質問を他の関心のあるユーザー(Xamarinフォームだけでなく)にまとめてもらいたいです。Xamarin.Forms Androidファイル交換、MTP

これまでのところ、 Christophe Geers' BlogFun with MTPと書き込みが壁のXamarin.Forms側では私のデバイスWindows File Stuff by Flauschig

のすべてでは動作しませんでしたので、私は最初Xamarin docA lib to store from pcl codeともPlugin.Permissionsつまずきました。

私は上記のすべての情報源を使って、Android(Samsung A5、Android 6.0)で読み書きすることができました。

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から取られ、許可が与えられていない場合は例外がスローされます:this description on filestructureで は、私は次のコードは、常に有効なパスを取得しますと思いました。

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); 
     } 
    } 

[OK]を、今、質問のため: 唯一私がテストした1台のデバイス(概念実証)に作成され、この方法によって作成されたフォルダ - 何も起こらない他のすべて(例えばサムスンA3、アンドロイド6.0) (無力な開発者の証拠)。 rebootは解決策ではありません。 また、このデバイス上で動作します - アクセス許可は期待どおりに要求されます。他のデバイスに許可要求はありません。

インストール時に目的のフォルダが作成されないのはなぜですか?それは他のすべてのアプリがそのようなフォルダ 'Android/data/com.exampledom.appname/files'を持っているようです。

私には何が欠けていますか?アンドロイドにインポート/エクスポートするのは過度に難しいようです。

+0

もう一度:最初に、apkをインストールするときに構造(アンドロイド上で必須と思われる)が作成されない理由のヒントをご希望ですか?他のすべてのアプリは「Android/data」の下に対応するフォルダを持っています。どんな助けもありがたい。 – smack

答えて

0

@smack CreationCollisionOptions.OpenIfExistsは本当にフォルダを作成しますか?私はそうは思わない。 CreateIfNotExists列挙型はありませんか?

+0

メソッドは「CreateFolderAsync」と呼ばれます。それはフォルダを作成します。また、それは1つの携帯電話で動作します。 – smack