Контент ури вылетает камера на Android KitKat

Я столкнулся с проблемой при использовании контента URI и FileProvider на Android API 19 (Kitkat). Вот код, который я использую, чтобы открыть камеру на устройстве и записать видео:

File file = new File(pathname);
Uri fileUri = FileProvider.getUriForFile(this, AUTHORITY_STRING, file);

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, requestCode);

Я тестировал этот код на API 23-24, и он работает просто отлично, но на API 19 камера закрывается с RESULT_CANCELED после того, как я начал снимать видео в приложении камеры. То же самое происходит, когда я пытаюсь сделать снимок с действием ACTION_IMAGE_CAPTURE. Я пытался изменить FileProvider.getUriForFile() с Uri.fromFile(). Это прекрасно работает на Kitkat, но я не могу использовать его на Android 7. Почему Camera на Adnroid Kitkat не хочет работать с контентом URI?

2 ответа

Решение

Не каждое приложение камеры будет поддерживать contentUri значения для EXTRA_OUTPUTХотя они должны. Но есть тысячи приложений камеры, и некоторый процент не получится на такой Uri, Например, до этого лета приложение камеры Google не поддерживало contentUri за EXTRA_OUTPUT за ACTION_VIDEO_CAPTURE,

Либо прекратить использование ACTION_VIDEO_CAPTURE или жить с ненадежными результатами.

Если вы хотите попробовать продолжать использовать fileUri значения, бросьте targetSdkVersion до 23 или ниже, или отключите FileUriExposedException изменяя StrictMode конфигурации.

Может быть, вы можете попробовать это.

    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT){
        fileUri = Uri.fromFile(mTmpFile);
    } else {
        fileUri = FileProvider.getUriForFile(getContext(),
                getContext().getPackageName()+".provider",mTmpFile);
    }
Другие вопросы по тегам