Почему активность камеры возвращается на ноль? - PullRequest
1 голос
/ 22 февраля 2020

Я использовал приведенные ниже коды для получения изображения с камеры и помещения его в режим просмотра изображений (imgViewAds).

private void BtnPhoto_Click(object sender, EventArgs e)
{          
    StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
    StrictMode.SetVmPolicy(builder.Build());


    Intent cameraIntent = new Intent(Android.Provider.MediaStore.ActionImageCapture);
    var activities = PackageManager.QueryIntentActivities(cameraIntent, 0);
    if (activities.Count > 0)
    {
        addAds.ImageName = Guid.NewGuid().ToString() + ".jpg";
        Java.IO.File imageFile = new Java.IO.File(AdsAdapter.ImagePath(addAds.ImageName));
        Android.Net.Uri imageUri = Android.Net.Uri.FromFile(imageFile);
        cameraIntent.PutExtra(MediaStore.ExtraSizeLimit, 1024*10);
        cameraIntent.PutExtra(MediaStore.ExtraOutput, imageUri);


        StartActivityForResult(cameraIntent, 0);

    }
    else
    {
        Toast.MakeText(this, "Not Camera", ToastLength.Long).Show();
    }
}

А вот OnActivityResult здесь результат отправки camare.

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{

    if (resultCode == Result.Ok && (data != null))
    {
        Bundle extras = data.Extras;
        Bitmap imageBitmap = (Bitmap)extras.Get("data");
        imgViewAds.SetImageBitmap(imageBitmap);

        MemoryStream stream = new MemoryStream();
        imageBitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
        addAds.AdsImage = stream.ToArray();
    }
    base.OnActivityResult(requestCode, resultCode, data);
}

но данные, отправляемые в OnActivityResult, являются нулевыми, а изображение не поступило в просмотр изображений.

1 Ответ

0 голосов
/ 22 февраля 2020

Когда вы передаете EXTRA_OUTPUT с URI для записи, намерение камеры будет null, а изображение находится в URI, который вы передали.

, так что вы можете просто удалить эти две строки :

Android.Net.Uri imageUri = Android.Net.Uri.FromFile(imageFile);
cameraIntent.PutExtra(MediaStore.ExtraOutput, imageUri);

обратите внимание, что таким образом вы получите миниатюру изображения. поэтому, если вы хотите получить полное изображение, вы можете использовать что-то вроде этого (я не тестировал код, но вы могли бы понять):

if (requestCode == CAMERA_REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            addAds.ImageName = Guid.NewGuid().ToString() + ".jpg";
        Java.IO.File imageFile = new Java.IO.File(AdsAdapter.ImagePath(addAds.ImageName));
            Uri uri = Uri.fromFile(file);
            Bitmap bitmap;
            try {
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                bitmap = cropAndScale(bitmap, 300); // if you mind scaling
                profileImageView.setImageBitmap(bitmap);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...