Данные onActivityResult для ссылки на пустой объект - PullRequest
0 голосов
/ 03 ноября 2018

Когда я запускаю камеру, данные равны нулю. Я не знаю почему .. Это код камеры:

 ((Button)view.findViewById(R.id.BtnOpenCamera)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                String file = "myimg.jpg";

                File path =  new File(Environment.getExternalStorageDirectory()+"/"+file);
                Uri outputFileUri = FileProvider.getUriForFile(getActivity().getApplicationContext(), BuildConfig.APPLICATION_ID
                        + ".provider", path);
                cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
                cameraIntent.putExtra("return-data", true);
                startActivityForResult(cameraIntent, 0);
            }
        });

EDİT; Добавлен блок кода ActivityAresult

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.e(LoggerID,requestCode+" "+resultCode+" "+(data != null));
}

Ответы [ 3 ]

0 голосов
/ 03 ноября 2018

Если камера открывается на фрагменте, она также должна вызываться в действии

0 голосов
/ 03 ноября 2018

Намерение ACTION_IMAGE_CAPTURE выполняется любым приложением камеры, зарегистрированным для обработки на конкретном устройстве. Такие приложения значительно различаются, даже если вы смотрите только «официальные» приложения камеры, предварительно установленные на устройстве производителем.

Не все эти приложения, особенно на нишевых устройствах, полностью соответствуют официальным спецификациям. Известно, что телефоны Samsung широко относятся к требованиям контракта о намерениях.

В вашем случае код использует недокументированный "return-data" дополнительный . Я вижу, что это упоминалось на некоторых форумах, связанных с Samsung, но даже тогда нет никаких доказательств того, что это действительно работает.

Только надежная ссылка - данные для ACTION_IMAGE_CAPTURE состояний намерения,

Вызывающий может передать дополнительный EXTRA_OUTPUT, чтобы указать, где будет записано это изображение. Если EXTRA_OUTPUT отсутствует, то изображение небольшого размера возвращается в качестве растрового объекта в дополнительное поле. Это полезно для приложений, которым требуется только небольшое изображение.

Но в реальной жизни даже это не гарантируется. Это означает, что ваше приложение должно быть готово получить нулевые данные от ACTION_IMAGE_CAPTURE просто потому, что вы не управляете приложением, которое выводит изображение на ваш onActivityResult(), даже если вы не передаете дополнительно EXTRA_OUTPUT .

0 голосов
/ 03 ноября 2018

Проверьте, помогает ли это

((Button)view.findViewById(R.id.BtnOpenCamera)).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Starts the Camera
            Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intentCamera, 0);
        }
    });

Затем поймать Ури в onActivityResult()

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

    if (requestCode == 0){

        try {
            // 1) Get the bitmap from the taken picture;
            Bitmap bitmap = (Bitmap) data.getExtras().get("data");

            // 2) Converts the bitmap into image String URL;
            Uri uri = ImageManager.getImageUriFromBitmap(getActivity(), bitmap, 50);
            String imgURL = ImageManager.getRealPathFromUri(getActivity(), uri);

            // Use the imgURL the way you need.

        } catch (NullPointerException e){e.printStackTrace();}
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...