クロスメディアプラグインは、既存の写真コードをアップロードしても動作することはありませんでした。代わりに、ネイティブギャラリー選択を実装するために依存性注入を使用しました。 URLを取得したら、イメージビューに貼り付けるか、ネイティブコードでビットマップなどで膨らませることができます。私は実際にModel.Photoに写真の名前とバイト[]を渡しますが、それはあなた次第です。
PCL
var x = await DependencyService.Get<IMedia>().UploadGallery();
アンドロイド
class Media_Android : Activity, IMedia
{
public async Task<string> UploadGallery()
{
var activity = Forms.Context as MainActivity;
Intent intent = new Intent();
intent.SetType("image/*");
intent.SetAction(Intent.ActionGetContent);
var result = await activity.StartActivityForResultAsync(intent);
if(result.Data != null)
{
Android.Net.Uri myUri = result.Data.Data;
var getString = this.GetPathToImage(myUri);
if (getString != null)
{
return getString;
}
else
{
return null;
}
}
else
{
return null;
}
}
}
private string GetPathToImage(Android.Net.Uri uri)
{
int currentapiVersion = (int)Android.OS.Build.VERSION.SdkInt; // Gets the Android version number for ex:- Lollipop 21-22, KitKat 19–20, JellyBean: 16-18.
string path = "";
// "KitKat 4.4(KitKat) and above compatible"
if (currentapiVersion > (int)Android.OS.BuildVersionCodes.JellyBeanMr2)
{
Android.Database.ICursor cursor1 = Forms.Context.ContentResolver.Query(uri, null, null, null, null);
cursor1.MoveToFirst();
string document_id = cursor1.GetString(0);
if(document_id.Contains(":"))
{
document_id = document_id.Split(':')[1];
}
cursor1.Close(); //Extract the ID from the URI
cursor1 = Forms.Context.ContentResolver.Query(
Android.Provider.MediaStore.Images.Media.ExternalContentUri,
null, MediaStore.Images.Media.InterfaceConsts.Id + " = ? ", new System.String[] { document_id }, null);
cursor1.MoveToFirst();
path = cursor1.GetString(cursor1.GetColumnIndex(MediaStore.Images.Media.InterfaceConsts.Data));
cursor1.Close(); //Query the device database, to get the Image based on the ID
}
//"JellyBean 4.1 - 4.3.1 (JellyBean) and below compatible"
if (currentapiVersion <= (int)Android.OS.BuildVersionCodes.JellyBeanMr2)
{
System.String[] projection = new System.String[] { Android.Provider.MediaStore.MediaColumns.Data };
contentResolver = Forms.Context.ContentResolver;
Android.Database.ICursor cursor = contentResolver.Query(uri, projection, null, null, null);
if (cursor != null && cursor.Count > 0)
{
cursor.MoveToFirst();
int index = cursor.GetColumnIndex(Android.Provider.MediaStore.MediaColumns.Data);
path = cursor.GetString(index);
}
}
return path;
}
のiOS
AndroidはGoogleだけよりもはるかに簡単です。
アプリがクラッシュした場合は、スタックトレースやその他の関連情報を追加してください。 – Cheesebaron
デバッガを追加し、アプリケーションがクラッシュしている行をチェックします。 –
あなたのコードはPlugin.Media、Version = 2.6.2.0で動作します.LocalPathLableはラベル、FileImageはImage、_mediaFileはクラス –