Не удается получить код камеры из документов Android для работы.

Я использую код из http://developer.android.com/training/camera/photobasics.html

код:

    private void dispatchTakePictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
            File photoFile = null;
            try {
                photoFile = FileUtilities.createImageFile();
            } catch (IOException ex) {
                // Error occurred while creating the File
                Toast.makeText(getActivity(),"Error!",Toast.LENGTH_SHORT).show();
            }
            if (photoFile != null) {
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                        Uri.fromFile(photoFile));
                startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
            }
        }
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
            Bundle extras = data.getExtras(); //error
            //code after this doesn't get executed
        }
    }

Я пытаюсь получить доступ к миниатюре и картинке, хранящейся на устройстве. Но по какой-то причине, когда я пытаюсь выполнить код, я получаю исключение нулевого указателя в data.getExtras(); часть.

Что мне здесь не хватает?

Ответ 1

Это один из известных событий в области разработки Android.

Android Intent не гарантирует получение захваченного изображения в data.getExtras(), особенно пользователь использует приложение сторонней камеры/изображения. Вы можете найти множество проб и предложений в здесь и где-нибудь в googled с "андроидной камерой намерение null".

Некоторые из них такие, как показано ниже.

  • data.getExtras().get("data");
  • data.getExtras() с другим ключом (например, "фото" )
  • data.getData()
  • Uri.fromFile(f) для EXTRA_OUTPUT предопределенного пути.
  • Uri.fromFile(f) с некоторым случайным именем файла (формат даты или времени IMG-xxx) без сохранения определения EXTRA_OUTPUT.

Я рекомендую вам найти его, используя точку останова, маршрут маршрута, который задан. Было бы хорошо проверить все их в подходе if-else if-else.

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

Ответ 2

Чтобы получить ThumbNail, вам не нужно создавать файл и т.д., пожалуйста, попробуйте этот код ниже.

   Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            // Ensure that there a camera activity to handle the intent
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                    startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
                }

и получить результаты.

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

            if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
                Bundle extras = data.getExtras();
                Bitmap imageBitmap = (Bitmap) extras.get("data");
                imgView.setImageBitmap(imageBitmap);
            }

    }

imgView - это ImageView, в котором вы хотите установить ThumbNail.

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

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

Все самое лучшее.