Предположим, у меня есть File
для моего локального видео, File
для моего эскиза, сгенерированного из моего локального видео. Мне удалось вставить видео в базу данных моего альбома, кроме того, я хочу вставить миниатюру, используя мою, а не ту, которая была сгенерирована из системы Android.
После некоторого поиска многие разработчики используют MediaStore.Video.Thumbnails.getThumbnail
для извлечения миниатюры из системы, но не для ее настройки. Так как же я могу вставить свое миниатюру в базу данных Thumbnails
?
Я попробовал код ниже, но не смог:
public static void saveVideo2SystemMedia(Context context, File videoFile, File videoThumbFile) {
ContentValues values = new ContentValues(3);
values.put(MediaStore.Video.Media.TITLE, videoFile.getPath());
values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
values.put(MediaStore.Video.Media.DATA, videoFile.getAbsolutePath());
Uri rst = context.getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
if (rst != null) {
long id = ContentUris.parseId(rst);
ContentValues cv = new ContentValues();
cv.put(MediaStore.Video.Thumbnails.DATA, videoThumbFile.getAbsolutePath());
cv.put(MediaStore.Video.Thumbnails.VIDEO_ID, id);
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile(videoThumbFile.getAbsolutePath(), opts);
cv.put(MediaStore.Video.Thumbnails.WIDTH, opts.outWidth);
cv.put(MediaStore.Video.Thumbnails.HEIGHT, opts.outHeight);
cv.put(MediaStore.Video.Thumbnails.KIND, MediaStore.Video.Thumbnails.MICRO_KIND);
Uri thumbRst = context.getContentResolver()
.insert(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, values);
// thumbRst is always null
}
}
Используя код выше, я могу видеть мое видео в системной галерее, но не покрываю сгенерированным эскизом.