В настоящее время я использую URI контента в своем поставщике файлов для получения изображений с камеры, возвращенных намерениями ACTION_IMAGE_CAPTURE
. Это прекрасно работает.Использование Content URI с ACTION_VIDEO_CAPTURE
По какой-то странной причине один и тот же вызов не работает при попытке получить видеофайл с камеры.
destinationFile = File.createTempFile("video", ".mp4", this.getFilesDir());
Uri uri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", destinationFile);
Intent cameraIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
cameraIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
cameraIntent.setClipData(ClipData.newRawUri(null, uri));
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(cameraIntent, ID);
Когда намерение возвращается в onActivityResult()
destinationFile пуст.
Просто замена MediaStore.ACTION_VIDEO_CAPTURE
на MediaStore.ACTION_IMAGE_CAPTURE
дает мне ожидаемое поведение: захваченное изображение сохраняется в destinationFile.
Это происходит на складе Android 6.0.1 на устройстве Nexus и приложении Google для камеры по умолчанию.
Являются ли контентные URI действительно не поддерживаемыми для захвата видео? Я бы предпочел не использовать URI файла в общедоступной директории.
* offtopic * вы удалили свой последний ответ на мой вопрос (FINGERPRINT SERVICE), пожалуйста, повторите его - вы были правы! просто нужно сделать недействительными кеши после !! пожалуйста, повторите, чтобы я мог принять вас –
. Так что пока мы должны продолжать использовать URI файлов - если только таргетинг на Android N. Спасибо за разъяснение! – limmatplatz
@limmatplatz: «нужно» - это сильный термин. Конечно, для вашего тестирования (и здравомыслия) вам нужно будет придерживаться 'file', пока ваше приложение Google Camera не поддержит' content' должным образом, после чего вы сможете переключиться на него и протестировать его. Тем не менее, вы можете воспользоваться этой возможностью, чтобы определить, что вы собираетесь делать, когда другие приложения камеры не смогут правильно обрабатывать контент. Пока ваш 'targetSdkVersion' не достигнет' N', 'файл' должен быть безопасным и должен быть повсеместно поддерживаться. Надеюсь, вы можете приостановить сборку 'targetSdkVersion' некоторое время. Например, через десять лет. :-) – CommonsWare