Контент ури вылетает камера на 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 ответа
Не каждое приложение камеры будет поддерживать content
Uri
значения для EXTRA_OUTPUT
Хотя они должны. Но есть тысячи приложений камеры, и некоторый процент не получится на такой Uri
, Например, до этого лета приложение камеры Google не поддерживало content
Uri
за EXTRA_OUTPUT
за ACTION_VIDEO_CAPTURE
,
Либо прекратить использование ACTION_VIDEO_CAPTURE
или жить с ненадежными результатами.
Если вы хотите попробовать продолжать использовать file
Uri
значения, бросьте 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);
}