在 audio_service v18 中使用扩展的 MediaItem
Posted
技术标签:
【中文标题】在 audio_service v18 中使用扩展的 MediaItem【英文标题】:Using an extended MediaItem in audio_service v18 【发布时间】:2021-10-21 12:27:47 【问题描述】:我正在寻找扩展 MediaItem 以便我可以使用自定义类轻松添加额外的元数据,而我无法使用 extras 属性(使用 extras 也比我的额外信息只是类的一部分更尴尬)。我尝试过扩展 MediaItem,但是当我更改 BaseAudioHandler 中的函数参数时,它说它是无效的覆盖。这是我的课的一个例子。其中大部分是从 MediaItem 复制粘贴的:
class CustomMediaItem extends MediaItem
final CustomClass customValue;
CustomMediaItem(
/// A unique id.
required final String id,
/// The title of this media item.
required final String title,
/// The album this media item belongs to.
final String? album,
/// The artist of this media item.
final String? artist,
/// The genre of this media item.
final String? genre,
/// The duration of this media item.
final Duration? duration,
/// The artwork for this media item as a uri.
final Uri? artUri,
/// Whether this is playable (i.e. not a folder).
final bool? playable = true,
/// Override the default title for display purposes.
final String? displayTitle,
/// Override the default subtitle for display purposes.
final String? displaySubtitle,
/// Override the default description for display purposes.
final String? displayDescription,
/// The rating of the media item.
final Rating? rating,
/// A map of additional metadata for the media item.
///
/// The values must be of type `int`, `String`, `bool` or `double`.
final Map<String, dynamic>? extras,
required this.customClass,
) : super(
id: id,
title: title,
album: album,
artist: artist,
genre: genre,
duration: duration,
artUri: artUri,
playable: playable,
displayTitle: displayTitle,
displaySubtitle: displaySubtitle,
displayDescription: displayDescription,
rating: rating,
extras: extras,
);
当我尝试替换 BaseAudioHandler 中的参数时,我得到了这个:
'MusicPlayerBackgroundTask.addQueueItem' ('Future<void> Function(CustomMediaItem)') isn't a valid override of 'BaseAudioHandler.addQueueItem' ('Future<void> Function(MediaItem)').dart(invalid_override)
我也尝试创建自己的 AudioHandler,但它给出了同样的错误。
【问题讨论】:
【参考方案1】:使用为此目的设计的extras
属性。来自MediaItem
的documentation:
附加属性
Map<String, dynamic>? extras
最终媒体项目的附加元数据映射。
值的类型必须为
int
、String
、bool
或double
。
因此,如果您想存储一个名为 isPreview
的额外布尔元数据,您可以执行以下操作:
final item = MediaItem(
id: 'id1',
title: 'Song title',
album: 'Album title',
extras:
'isPreview': true,
,
);
extras
地图中可以存储的额外属性数量没有限制。
【讨论】:
以上是关于在 audio_service v18 中使用扩展的 MediaItem的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 audio_service 在 Android 上显示当前正在播放的音频?
如何使用插件audio_service颤动处理音频通知的onTap?