不能在片段中应用 protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)。

问题描述 投票:0回答:1

我想从图库和相机中拍摄图片后显示图片,但是,我遇到了一个问题。我使用Xamarin Android native与c#进行开发。在这种情况下,我使用一个片段来显示我的图片。问题是,我不能覆盖 protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) . 我知道这个功能是用来发送图像并在图像视图中显示图像的。但是,错误说,没有找到合适的方法来覆盖。另外,我在 resultCodeContentResolver

请帮助我。它让我疯狂。有什么帮助吗?

下面是我的完整代码。

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);
                }
            }
        }
c# android xamarin.android
1个回答
0
投票

我想你调用了错误的方法(protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) 在Activity中使用),你应该投下 Result.OKint 在C# Xamarin.Android中,请查看以下内容。

public override void OnActivityResult(int requestCode, int resultCode, Intent data)
    {
        base.OnActivityResult(requestCode, resultCode, data);
        if (requestCode == PICK_IMAGE_REQUSET &&
          resultCode == (int)Result.Ok  &&
          data != null &&
          data.Data != null)
          {
            filePath = data.Data;
            try
            {
                mBitMap = MediaStore.Images.Media.GetBitmap(Activity.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 == (int)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);
            }
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.