コメント
コメントの投稿
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。
/// <summary>
/// 非同期でクラウド上のファイルをダウンロードし、キャッシュしたファイルを返す
/// </summary>
/// <param name="context"></param>
/// <param name="uri"></param>
/// <returns>キャッシュファイル</returns>
public static Java.IO.File DownloadFileOnCloud(Context context, Android.Net.Uri uri)
{
Java.IO.File cacheFile = new Java.IO.File(context.ExternalCacheDir, "image_cache");
var task = new Task<Java.IO.File>(() =>
{
try
{
using (Stream fis = context.ContentResolver.OpenInputStream(uri))
{
Java.IO.FileOutputStream fos = new Java.IO.FileOutputStream(cacheFile);
byte[] buf = new byte[32768]; // 一時バッファ
int len = 0;
while (true)
{
len = fis.Read(buf, 0, buf.Length);
if (len > 0)
{
fos.Write(buf, 0, len);
}
else
{
break;
}
}
//ファイルに書き込む
fos.Flush();
fos.Close();
fis.Close();
}
return cacheFile;
}
catch (Exception ex)
{
System.Diagnostict.Debug.WriteLine(ex.Message + System.Environment.NewLine + ex.StackTrace);
return null;
}
}
);
task.Start();
task.Wait();
return task.Result;
}
protected override void OnActivityResult(int requestCode, Result resultCode, global::Android.Content.Intent data)
{
{
base.OnActivityResult(requestCode, resultCode, data);
//ImageGallery
if (resultCode == Result.Ok)
{
//ローカルギャラリーから選択されたファイルパスを取得する
string filePath = this.GetSelectedFilePath(data);
if (String.IsNullOrEmpty(filePath))
{
//Google Driveのファイルの場合はダウンードしたファイルのパスを返す。
filePath = ImageService.DownloadFileOnCloud(this, data.Data).Path;
}
//App.csでImageオブジェクトのImageSourceにセットする
App.SetPickupImageSource(filePath);
}
}
catch (Exception ex)
{
System.Diagnostict.Debug.WriteLine(ex.Message + System.Environment.NewLine + ex.StackTrace);
}
}
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。