Записав видео с помощью mediaRecorder и Camera API, я пытаюсь сохранить видео в галерее пользователя (либо сохраняя его во внешние фильмы, каталог DCIM или другое).
К сожалению, код Я обнаружил, что из документации или StackOverflow, похоже, создают свои соответствующие URI без какой-либо ссылки на записанное видео или файл, в котором оно хранится. В частности, код, который я пытался использовать, выглядит следующим образом:
String videoFileName = "video_" + System.currentTimeMillis() + ".mp4";
ContentValues valuesvideos;
valuesvideos = new ContentValues();
valuesvideos.put(MediaStore.Video.Media.RELATIVE_PATH, "Movies/" + "Folder");
valuesvideos.put(MediaStore.Video.Media.TITLE, videoFileName);
valuesvideos.put(MediaStore.Video.Media.DISPLAY_NAME, videoFileName);
valuesvideos.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
valuesvideos.put(MediaStore.Video.Media.DATE_ADDED, System.currentTimeMillis() / 1000);
valuesvideos.put(MediaStore.Video.Media.DATE_TAKEN, System.currentTimeMillis());
valuesvideos.put(MediaStore.Video.Media.IS_PENDING, 1);
ContentResolver resolver = context.getContentResolver();
Uri collection = MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
Uri uriSavedVideo = resolver.insert(collection, valuesvideos);
ParcelFileDescriptor pfd;
try {
pfd = context.getContentResolver().openFileDescriptor(uriSavedVideo,"w");
assert pfd != null;
FileOutputStream out = new FileOutputStream(pfd.getFileDescriptor());
// Get the already saved video as fileinputstream from here
File storageDir = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "Folder");
File imageFile = new File(storageDir, "testStorage");
FileInputStream in = new FileInputStream(imageFile);
byte[] buf = new byte[8192];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.close();
in.close();
pfd.close();
} catch (Exception e) {
e.printStackTrace();
}
Код и ответы вокруг него, похоже, подразумевают, что, обратившись к MediaStore.VOLUME_EXTERNAL_PRIMARY, преобразователь может получить доступ к сохраненному видеофайлу, но я не вижу явной ссылки на Это. Перед записью видео я определяю файл, назначенный для mediaRecorder, как таковой:
static File getMediaFile(Context c) {
File mediaStorageDir = c.getExternalFilesDir(null);
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
return new File(mediaStorageDir.getPath() + File.separator + "VID_" + timeStamp + ".mp4");
}
После остановки видео я получаю эту ошибку (ссылаясь на эту строку: Uri uriSavedVideo = resolver.insert(collection, valuesvideos);
):
java .lang.UnsupportedOperationException: Неизвестный URI: content: // media / external_primary / video / media в android .database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils. java .167) ...
Как правильно создать URI со ссылкой на сохраненное видео? Замена URI из файла Uri.fromFile(f);
вместо uriSavedVideo тоже не работает.