Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android Q中从SD卡生成缩略图_Android_Video_Android 10.0 - Fatal编程技术网

在Android Q中从SD卡生成缩略图

在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

我正在使用下面的方法生成缩略图(android 10中不推荐使用该方法)

像这样的例外

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;
    }