.Net Desktop AppとXamarin.Forms Androidアプリの間でファイルを交換しようとしています。私は本当にリソースを手に入れることができませんでしたので、この質問を他の関心のあるユーザー(Xamarinフォームだけでなく)にまとめてもらいたいです。Xamarin.Forms Androidファイル交換、MTP
これまでのところ、 Christophe Geers' BlogとFun with MTPと書き込みが壁のXamarin.Forms側では私のデバイスWindows File Stuff by Flauschig
のすべてでは動作しませんでしたので、私は最初Xamarin docとA 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'を持っているようです。
私には何が欠けていますか?アンドロイドにインポート/エクスポートするのは過度に難しいようです。
もう一度:最初に、apkをインストールするときに構造(アンドロイド上で必須と思われる)が作成されない理由のヒントをご希望ですか?他のすべてのアプリは「Android/data」の下に対応するフォルダを持っています。どんな助けもありがたい。 – smack