在Android Q中从SD卡生成缩略图
我正在使用下面的方法生成缩略图(android 10中不推荐使用该方法) 像这样的例外在Android Q中从SD卡生成缩略图,android,video,android-10.0,Android,Video,Android 10.0,我正在使用下面的方法生成缩略图(android 10中不推荐使用该方法) 像这样的例外 java.io.IOException: Failed to create thumbnail 谢谢。您的实现存在一些问题 第一个是createVideoThumbnail,已从以下内容更改为: 公共静态位图CreateVideo缩略图(字符串文件路径,int类) 到 公共静态位图CreateVideo缩略图(文件文件、大小、取消信号) 第二种方法是检索路径并尝试将其转换为Uri: String path
java.io.IOException: Failed to create thumbnail
谢谢。您的实现存在一些问题 第一个是
createVideoThumbnail
,已从以下内容更改为:
公共静态位图CreateVideo缩略图(字符串文件路径,int类)
到
公共静态位图CreateVideo缩略图(文件文件、大小、取消信号)
第二种方法是检索
路径
并尝试将其转换为Uri
:
String path=getExternalFilesDir(Environment.DIRECTORY\u MOVIES).getAbsolutePath()+“/”+新SimpleDataFormat(“yyyyMM\u dd-HHmmss”).format(new Date())+“\u compress.mp4”;
Uri fileUri=FileProvider.getUriForFile(这个,getPackageName()+“.provider”,新文件(路径));
相反,您应该使用ContentValues
和ContentResolver
创建Uri
,然后写入该Uri
并在完成后插入,如下所示:
ContentValues-values-videos=新的ContentValues();
valuesvideos.put(MediaStore.Images.Media.RELATIVE_路径,“Movies/”);
valuesvideos.put(MediaStore.Images.Media.TITLE,文件名);
valuesvideos.put(MediaStore.Images.Media.DISPLAY_名称、文件名);
valuesvideos.put(MediaStore.Images.Media.MIME_类型,“image/jpeg”);
值videos.put(添加了MediaStore.Images.Media.DATE,System.currentTimeMillis()/1000);
值videos.put(MediaStore.Images.Media.DATE_take,System.currentTimeMillis());
值videos.put(MediaStore.Images.Media.IS_PENDING,1);
ContentResolver解析器=getContentResolver();
Uri集合=MediaStore.Images.Media.getContentUri(MediaStore.VOLUME\u EXTERNAL\u PRIMARY);
尺寸mSize=新尺寸(96,96);
CancellationSignal ca=新的CancellationSignal();
位图bitmapThumbnail=getContentResolver().loadThumbnail(集合、mSize、ca);
Uri uriSavedThumb=resolver.insert(集合、值视频);
这是一种从存储器生成视频缩略图的解决方案
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
thumbnail_bitmap = createThumbnail(RecordPitchActivity.this, path);
} else {
thumbnail_bitmap = ThumbnailUtils.createVideoThumbnail(path, MediaStore.Video.Thumbnails.FULL_SCREEN_KIND);
}
请看:@HB谢谢您的重播。我确实实现了您的解决方案,但出现了与路径相关的错误,如:“java.io.FileNotFoundException:无法打开。”content://com.wrlnk.provider/external_files/Movies/202011_26-102204_compress.mp4 作为type image/*'@VishalBhimani,您传递了mime类型
image/*
,但随后传递/选择了一个视频文件。@HB我没有传递任何mime类型urifileuri=FileProvider.getUriForFile(这个,getPackageName()+“.provider”,新文件(路径));请尝试{thumbnail_bitmap=getContentResolver().LoadThumnail(fileUri,mSize,ca);}catch(IOException e){e.printStackTrace();}
导入哪个MediaStore
?获取MediaStore.Image时出错。我认为它的图像
不是图像
在您的解决方案中如何知道用于生成缩略图的视频文件?
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
thumbnail_bitmap = createThumbnail(RecordPitchActivity.this, path);
} else {
thumbnail_bitmap = ThumbnailUtils.createVideoThumbnail(path, MediaStore.Video.Thumbnails.FULL_SCREEN_KIND);
}
public static Bitmap createThumbnail(Activity activity, String path) {
MediaMetadataRetriever mediaMetadataRetriever = null;
Bitmap bitmap = null;
try {
mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(activity, Uri.parse(path));
bitmap = mediaMetadataRetriever.getFrameAtTime(1000, MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (mediaMetadataRetriever != null) {
mediaMetadataRetriever.release();
}
}
return bitmap;
}