如何解决如何将视频保存到图库并检索保存的视频uri?
我正在尝试为我的应用保存到图库功能。我的应用程序的最低api级别是21,最高30。 这是我用来将视频保存到图库的代码。一切正常,但代码仅适用于API 29及更高版本。这是代码:
String videoFileName = "video_" + System.currentTimeMillis() + ".mp4";
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
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 parcelFileDescriptor;
try {
assert uriSavedVideo != null;
parcelFileDescriptor = context.getContentResolver().openFileDescriptor(uriSavedVideo,"w");
assert parcelFileDescriptor != null;
FileOutputStream out = new FileOutputStream(parcelFileDescriptor.getFileDescriptor());
FileInputStream in = new FileInputStream(context.getExternalFilesDir(Environment.DIRECTORY_MOVIES) + File.separator + "Application" + File.separator + "video.mp4");
byte[] buf = new byte[8192];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf,len);
}
out.close();
in.close();
parcelFileDescriptor.close();
} catch (Exception e) {
e.printStackTrace();
}
valuesvideos.clear();
valuesvideos.put(MediaStore.Video.Media.IS_PENDING,0);
context.getContentResolver().update(uriSavedVideo,valuesvideos,null,null);
}
这是我用于API 29以下版本的代码:
ContentValues valuesvideos;
valuesvideos = new ContentValues();
valuesvideos.put(MediaStore.Video.Media.DATA,context.getExternalFilesDir(Environment.DIRECTORY_MOVIES) + File.separator + "Folder");
valuesvideos.put(MediaStore.Video.Media.TITLE,System.currentTimeMillis() / 1000);
ContentResolver resolver = context.getContentResolver();
Uri collection = MediaStore.Video.Media.INTERNAL_CONTENT_URI;
Uri uriSavedVideo = resolver.insert(collection,len);
}
out.close();
in.close();
parcelFileDescriptor.close();
} catch (Exception e) {
e.printStackTrace();
}
valuesvideos.clear();
context.getContentResolver().update(uriSavedVideo,null);
如何为较低的API编写此确切函数?现在,我尝试使用MediaScanner,但它似乎太慢了,无法获取已保存文件的uri。希望你会回答。问候。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。