onActivityResult возвращает нулевое намерение

Я пытаюсь захватить изображение с камеры. Но он возвращает нулевой Intent onActivityResult . Вот мой код

CaptureImageFromCamera.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, 7);
    }
});

А также onActivityResult является

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 7 && resultCode == RESULT_OK) {
        try {
            if(data.getData() == null) {
                bitmap = (Bitmap)data.getExtras().get("data");
            } else {
                bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData());
            }

            ImageViewHolder.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Я новичок в Android, поэтому, пожалуйста, объясните ответ подробно. Заранее спасибо..!

3 ответа

Начните свою работу, передав намерение через это:

startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), 100);

поэтому после захвата изображения с камеры используйте для получения данных об изображениях намеренно:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     Uri yourCapturedImage = intent.getData();
 }

Убедитесь, что вы добавили разрешения камеры, разрешения записи в манифесте, а также перекрестную проверку разрешений во время выполнения.

Используйте ваше намерение, как показано ниже, и укажите путь, куда будет записываться захваченное изображение -

   intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

   Uri outputUri = Uri.fromFile("path of your directory");
   intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri);

   startActivityForResult(intent, 7);

Uri imageUri = data.getData() больше не будет работать.. сначала получите bitmap из data как это:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        val imageBitmap = data.extras.get("data") as Bitmap
        imageView.setImageBitmap(imageBitmap)
    }
}

затем сохраните растровое изображение... подробности можно найти здесь:

https://developer.android.com/training/camera/photobasics

Вы также можете использовать setImageURI() в onActivityResult() вместо setImageBitmap()

Прежде всего добавьте разрешения камеры в Android манифест. Если ваша версия для Android больше, чем Lollipop, то вам нужно добавить разрешения во время выполнения. См. Документацию здесь

<uses-permission android:name="android.permission.CAMERA"/>

и тогда ваш код будет

CaptureImageFromCamera.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, 7);
    }
});

а затем использовать setImageUrI() в вашем onActivityResult()

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

     switch (requestCode)
        {
            case 7:
                /*case 7 for image results and display image in imageview via Uri*/
                if (resultCode == RESULT_OK)
                {
                    Uri imageUri = data.getData();
                    ImageViewHolder.setImageURI(imageUri);
                }
                return;
           default:
                return;
        }
}
Другие вопросы по тегам