在 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&lt;String, dynamic&gt;? extras 最终

媒体项目的附加元数据映射。

值的类型必须为 intStringbooldouble

因此,如果您想存储一个名为 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”包一起使用

如何使用插件audio_service颤动处理音频通知的onTap?

分享DONI V18家用智能扫地机使用说明书

使用 just_audio 和 audio_service 播放用户在 mediaItem 上停止的位置

努比亚v18是安桌系统吗