鸿蒙OS 媒体元数据开发指导
场景介绍
媒体元数据主要用于媒体数据的存放和读取,包含诸如媒体资源的描述、创建日期、作者、封面图片等等。
接口说明
接口名 |
功能描述 |
Builder() |
媒体元数据构造器的构造函数。 |
Builder(AVMetadata source) |
媒体元数据构造器的带参构造函数。 |
setText(String key, CharSequence value) |
用于存储媒体标题等信息。 |
setString(String key, String value) |
用于存储媒体作者、艺术家、描述等。 |
setLong(String key, long value) |
用于存储媒体 ID、媒体时长等信息。 |
setPixelMap(String key, PixelMap value) |
用于存储媒体元数据相关的图片资源。 |
build() |
媒体元数据生成函数。 |
接口名 |
功能描述 |
hasKey(String key) |
媒体元数据中是否包含某一个 key 的数据。 |
getText(String key) |
获取 text 类型的 key 的数据,比如获取媒体标题等信息。 |
getString(String key) |
获取 String 类型 key 的数据,比如获取媒体作者、艺术家、描述等。 |
getLong(String key) |
获取 Long 类型 key 数据,比如获取媒体 ID、媒体时长等信息。 |
getKeysSet() |
获取媒体元数据的集合。 |
getPixelMap(String key) |
获取 PixelMap 类型 key 数据,获取媒体元数据相关的图片资源。 |
marshalling(Parcel in) |
将一个 AVMetadata 对象写入到 Parcel 对象。 |
getAVDescription() |
获取媒体的简要描述信息。 |
开发步骤
- 调用 AVMetadata.Builder 类的 build 方法创建 AVMetadata 实例。代码示例如下:
AVMetadata avMetadata = new AVMetadata.Builder().setString(AVMetadata.AVTextKey.MEDIA_ID, "illuminate.mp3")
.setString(AVMetadata.AVTextKey.TITLE, "title")
.setString(AVMetadata.AVTextKey.ARTIST, "artist")
.setString(AVMetadata.AVTextKey.ALBUM, "album")
.setString(AVMetadata.AVTextKey.DISPLAY_SUBTITLE, "display_subtitle")
.setPixelMap(AVMetadata.AVPixelMapKey.DISPLAY_ICON_URI, pixelmap)
.build();
- (可选)根据已有的 AVMetadata 对象,可以获取媒体元数据信息,如获取媒体标题等,代码示例如下:
String title = avMetadata.getString(AVMetadata.AVTextKey.TITLE);
- 我们需要结合 AVSession 使用,将已有的媒体元数据 AVMetadata 对象下发给应用,具体参考 AVSession 使用,示例如下:
mediaSession.setAVMetadata(avMetadata);
- 应用获取媒体元数据一般结合 AVControllerCallback 相关类使用,通过 onAVMetadataChanged 回调获取媒体元数据。
public class Callback extends AVControllerCallback {
@Override
public void onAVMetadataChanged(AVMetadata metadata) {
// 歌曲信息回调
AVDescription description = metadata.getAVDescription();
// 获取标题
String title = description.getTitle().toString();
CharSequence sequence = metadata.getText(AVMetadata.AVTextKey.TITLE);
if (sequence != null) {
title = metadata.getText(AVMetadata.AVTextKey.TITLE).toString();
}
// 设置媒体title
musicTitle.setText(title);
// 获取曲目专封面
PixelMap iconPixelMap = description.getIcon();
// 设置歌曲封面图
musicCover.setPixelMap(iconPixelMap);
}
}