首页 > 解决方案 > 如何在 Android API 29 中获取缩略图

问题描述

试图从视频中获取缩略图。在 API 29 之前,这是使用 MediaStore.Images.Thumbnails 管理的。代码示例

Bitmap bitmapThumbnail = ThumbnailUtils.createVideoThumbnail(videoArrayList.get(position).getPath(), MediaStore.Images.Thumbnails.MINI_KIND);

但在 API 29 MediaStore.Images.Thumbnails 被声明为弃用。Google 提供 ContentResolver # loadThumbnail。告诉我如何使用它。

标签: android

解决方案


createVideoThumbnail更改为:

public static Bitmap createVideoThumbnail (String filePath, int kind)

public static Bitmap createVideoThumbnail (File file, Size size, CancellationSignal 信号)


因此,您在问题中提供的示例将更改为以下内容:

Size mSize = new Size(96,96);
CancellationSignal ca = new CancellationSignal();
Bitmap bitmapThumbnail = ThumbnailUtils.createVideoThumbnail(new File(videoArrayList.get(position).getPath()), mSize, ca);

您可以通过调用CancellationSignal来取消创建。Bitmapca.cancel();

Size值取决于Bitmap您想要的大小:

大小:屏幕上将显示此缩略图的目标区域。这将作为 EXTRA_SIZE 传递给提供程序,以帮助它避免下载或生成大量资源。此值不能为空。


您也可以使用loadThumbnail,它接受 aUri而不是File对象,如下所示:

public Bitmap loadThumbnail (Uri uri, Size size, CancellationSignal 信号)

因此,您的代码将如下所示:

Uri mUri = ...; // Your Uri
Size mSize = new Size(96,96);
CancellationSignal ca = new CancellationSignal();
Bitmap bitmapThumbnail = getContentResolver().loadThumbnail(mUri, mSize, ca);

推荐阅读