问题描述
这是我必须将应用程序生成的视频存储在磁盘上的当前代码。我希望其他应用程序(如 TikTok、WhatsApp 和谷歌照片)可以访问这些视频。我还想在我的应用程序中创建我自己的画廊。但是,通过以下方法保存的文件不会显示在 TikTok 上。它们显示在 Google 照片库\电影文件夹下,用户必须深入挖掘才能找到。
如何让所有应用都可以访问这些文件?如何编写自己的视频库以仅显示由我的应用创建的文件?
private void addVideoTogallery(File videoFile) {
Uri uriSavedVideo;
File createdvideo = null;
ContentResolver resolver = activity.getContentResolver();
String path = videoFile.getAbsolutePath();
String videoFileName = path.substring(path.lastIndexOf("/") + 1);
ContentValues valuesvideos;
valuesvideos = new ContentValues();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
valuesvideos.put(MediaStore.Video.Media.RELATIVE_PATH,Environment.DIRECTORY_MOVIES + File.pathSeparator + activity.getString(R.string.app_name));
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);
Uri collection = MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
uriSavedVideo = resolver.insert(collection,valuesvideos);
} else {
String directory = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + Environment.DIRECTORY_MOVIES;
createdvideo = new File(directory,videoFileName);
valuesvideos.put(MediaStore.Video.Media.TITLE,System.currentTimeMillis() / 1000);
valuesvideos.put(MediaStore.Video.Media.DATA,createdvideo.getAbsolutePath());
uriSavedVideo = resolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,valuesvideos);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
valuesvideos.put(MediaStore.Video.Media.DATE_TAKEN,System.currentTimeMillis());
valuesvideos.put(MediaStore.Video.Media.IS_PENDING,1);
}
ParcelFileDescriptor pfd;
try {
pfd = resolver.openFileDescriptor(uriSavedVideo,"w");
FileOutputStream out = new FileOutputStream(pfd.getFileDescriptor());
FileInputStream in = new FileInputStream(videoFile);
byte[] buf = new byte[8192];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf,len);
}
out.close();
in.close();
pfd.close();
} catch (Exception e) {
e.printstacktrace();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
valuesvideos.clear();
valuesvideos.put(MediaStore.Video.Media.IS_PENDING,0);
resolver.update(uriSavedVideo,valuesvideos,null,null);
}
}
private void getVids(){
List<Video> videoList = new ArrayList<Video>();
Uri collection;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
collection = MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
} else {
collection = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
}
String[] projection = new String[] {
MediaStore.Video.Media._ID,MediaStore.Video.Media.disPLAY_NAME,MediaStore.Video.Media.DURATION,MediaStore.Video.Media.SIZE
};
String selection = MediaStore.Video.Media.DURATION +
" >= ?";
String[] selectionArgs = new String[] {
String.valueOf(TimeUnit.MILLISECONDS.convert(5,TimeUnit.MINUTES))};
String sortOrder = MediaStore.Video.Media.disPLAY_NAME + " ASC";
try (Cursor cursor = activity.getContentResolver().query(
collection,projection,selection,selectionArgs,sortOrder
)) {
// Cache column indices.
int idColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID);
int nameColumn =
cursor.getColumnIndexOrThrow(MediaStore.Video.Media.disPLAY_NAME);
int durationColumn =
cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION);
int sizeColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);
while (cursor.movetoNext()) {
// Get values of columns for a given video.
long id = cursor.getLong(idColumn);
String name = cursor.getString(nameColumn);
int duration = cursor.getInt(durationColumn);
int size = cursor.getInt(sizeColumn);
Uri contentUri = ContentUris.withAppendedId(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,id);
// Stores column values and the contentUri in a local object
// that represents the media file.
videoList.add(new Video(contentUri,name,duration,size));
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)