Android createVideoThumbnail返回null,但在内部抛出Runtime Exception

时间:2018-06-25 23:52:13

标签: android sdk video-thumbnails

当我在AndroidManifest.xml和gradle构建中将SDK从23升级到26时,发生了此错误。以为这可能与Uri.fromFile()错误有关,该错误是由于使用Intent(例如,将文件传递给Camera)而使用外部应用程序引起的,但SDK中的源似乎没有这样做。

呼叫看起来像这样,路径正确:

Bitmap captured = ThumbnailUtils.createVideoThumbnail(videoSourcePath,MediaStore.Images.Thumbnails.FULL_SCREEN_KIND);

我已确认文件存在并且AndroidManifest.xml具有外部存储权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在从MP4文件捕获位图方面,SDK 23和26之间是否发生了我不知道的更改?

更新

因此,真正的问题原来是图像的路径。如果您使用以下调用,当您从Intent返回的数据(在本例中为视频捕获)中时,在SDK 26下看起来像:

videoSourcePath = data.getData().getPath();

它将不再正确返回视频的物理位置,而是添加了“ external_files”,这使路径无效。

所以曾经返回的是:

/storage/emulated/0/myapp/mycustomer/newvideofile.mp4

现在是:

/external_files/myapp/mycustomer/newvideofile.mp4

我最终只是使用发送的原始源,而不是依赖Intent返回的内容。

1 个答案:

答案 0 :(得分:1)

您可以使用Glide检索视频缩略图。

// 1st: Generate image and set to imageview

Glide.with(context).asBitmap()
     .load(filePathWithExtension)
     .into(imageview);

// 2nd: Get Bitmap from Glide

GlideApp.with(context)
        .asBitmap()
            .load(filePathWithExtension)
        .into(new SimpleTarget<Bitmap>() {
            @Override
            public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
                // You can use **resource**.
                imageview.setImageBitmap(resource);
             }
        });