Я хочу отобразить изображение после съемки фотографий из галереи и камеры, но у меня есть проблема с этим. Я использую Xamarin Android native с c# для разработки. В этом случае я использую фрагмент для отображения моего изображения. Проблемы в том, что я не могу переопределить функцию protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
. Я знаю, что эта функция предназначена для отправки изображения и отображения изображения в виде изображения. Но, как говорится в сообщении об ошибке, не найдено подходящего метода для переопределения. Также я получил ошибку в resultCode
и ContentResolver
Пожалуйста, помогите мне. Это сводит меня с ума. Любая помощь?
Вот мой полный код:
using Android.App;
using Android.Content;
using Android.Graphics;
using Android.OS;
using Android.Provider;
using Android.Runtime;
using Android.Support.V7.App;
using Android.Views;
using Android.Widget;
using System;
using System.IO;
namespace MyPhotographicMemory.Droid.Fragments
{
public class Fragment_Picture : Android.Support.V4.App.Fragment
{
private Button btnUpload, btnChoose, btnCapture;
private ImageView imgView;
public Bitmap mBitMap;
private Android.Net.Uri filePath;
private const int PICK_IMAGE_REQUSET = 71;
private const int TAKE_IMAGE_REQUSET = 0;
private MemoryStream inputStream;
private ProgressBar progressBar;
public string URL { get; private set; }
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var ignored = base.OnCreateView(inflater, container, savedInstanceState);
var v = inflater.Inflate(Resource.Layout.FragmentPicture, null);
btnChoose = v.FindViewById<Button>(Resource.Id.btnChoose);
btnUpload = v.FindViewById<Button>(Resource.Id.btnUpload);
btnCapture = v.FindViewById<Button>(Resource.Id.btnCapture);
imgView = v.FindViewById<ImageView>(Resource.Id.imgView);
progressBar = v.FindViewById<ProgressBar>(Resource.Id.progressBar);
btnChoose.Click += BtnChoose_Click;
btnUpload.Click += BtnUpload_Click;
btnCapture.Click += BtnCapture_Click;
return v;
}
//button events
private void BtnCapture_Click(object sender, EventArgs e)
{
CaptureImage();
}
private void BtnUpload_Click(object sender, EventArgs e)
{
ContinueImage();
Busy();
}
private void BtnChoose_Click(object sender, EventArgs e)
{
ChooseImage();
}
//call
private void Busy()
{
btnCapture.Enabled = false;
btnChoose.Enabled = false;
btnUpload.Enabled = false;
progressBar.Visibility = Android.Views.ViewStates.Visible;
}
private void ContinueImage()
{
if (inputStream != null)
Upload(inputStream);
}
private void Upload(MemoryStream inputStream)
{
throw new NotImplementedException();
}
private void CaptureImage()
{
Intent intent = new Intent(MediaStore.ActionImageCapture);
StartActivityForResult(intent, 0);
}
private void ChooseImage()
{
Intent intent = new Intent();
intent.SetType("image/*");
intent.SetAction(Intent.ActionGetContent);
StartActivityForResult(Intent.CreateChooser(intent, "Select Picture"), PICK_IMAGE_REQUSET);
}
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUSET &&
resultCode == Result.Ok &&
data != null &&
data.Data != null)
{
filePath = data.Data;
try
{
mBitMap = MediaStore.Images.Media.GetBitmap(ContentResolver, filePath);
imgView.SetImageBitmap(mBitMap);
byte[] bitmapData;
using (var stream = new MemoryStream())
{
mBitMap.Compress(Bitmap.CompressFormat.Jpeg, 100, stream);
bitmapData = stream.ToArray();
}
inputStream = new MemoryStream(bitmapData);
}
catch (IOException ex)
{
Console.WriteLine(ex);
}
}
else if (requestCode == 0 &&
resultCode == Result.Ok &&
data != null)
{
try
{
mBitMap = (Bitmap)data.Extras.Get("data");
imgView.SetImageBitmap(mBitMap);
byte[] bitmapData;
using (var stream = new MemoryStream())
{
mBitMap.Compress(Bitmap.CompressFormat.Jpeg, 100, stream);
bitmapData = stream.ToArray();
}
inputStream = new MemoryStream(bitmapData);
}
catch (IOException ex)
{
Console.WriteLine(ex);
}
}
}