使用IcyMetadata的Flutter audio_service流更新通知



我只想为一个流/url创建一个streamApp。

在audio_service示例中,在AudioPlayerHandler中添加了一个MediaItem。

这很有效,但当IcyMedata更新通知时……显然……有来自添加的MediaItem的标题和内容。在应用程序中,我可以更新每个_audioHandler.playbackstate和_player.icyMetadata!。信息!。标题和一些刺痛。拆分('-(我可以用StreamBilder在应用程序中更新Infos。

还尝试了一种肮脏的破解方法,通过更改audio_service在PlaybackState对象中添加title,并将title添加为属性,然后在自定义AudioHandler中将其与_player.icy…连接。

但必须有一种适当的方法来设置新的元数据,或者通过这个框架本身设置元数据_audioHandler.updateMediaItem到目前为止对通知信息没有任何作用,这就是我需要的!

我发现了一个addStream…我的尝试(代码段(

Stream<MediaItem> _item()  async* {   MediaItem(
id: "http://stream.drumandbass.fm:9012",
title: "TEST",
artist: "Hello",
album: "Album",
duration: const Duration(milliseconds: 5739820),
genre: 'Drum and Bass',
artUri: Uri.parse('test.jpg'));
}
Future<AudioPlayerHandler> initAH() async {
return await AudioService.init(
builder: () => AudioPlayerHandler(),
config: const AudioServiceConfig(
androidNotificationChannelId: 'com.ryanheise.myapp.channel.audio',
androidNotificationChannelName: 'Audio playback',
androidNotificationOngoing: true,
),
);
class AudioPlayerHandler extends BaseAudioHandler {
/// Initialise our audio handler.
AudioPlayerHandler() {
// So that our clients (the Flutter UI and the system notification) know
// what state to display, here we set up our audio handler to broadcast all
// playback state changes as they happen via playbackState...
_player.playbackEventStream.map(_transformEvent).pipe(playbackState);
// ... and also the current media item via mediaItem.
mediaItem.addStream(_item());
// Load the player.
_player.setAudioSource(AudioSource.uri(Uri.parse(mediaItem.value!.id)));
}
// some play stop the rest of the example of audio_service

小工具:

FutureBuilder<AudioPlayerHandler>(
future: initAH(),
builder: (BuildContext context,
AsyncSnapshot<AudioPlayerHandler> snapshot) {
if (!snapshot.hasData) {
// while data is loading:
return Center(
child: CircularProgressIndicator(),
);
} else {
_audioHandler = snapshot.data!;
loaded = true;
// data loaded:
return Container();
}
},
),

…带有_player.add(MediaItem(((;就像在例子中一样,我得到了一个snapshot.hasData,但加载了addStream后保持false。

我感谢你给我的任何建议来妥善处理这个问题。

thx,

Tom

因为您没有看到通知。请检查您的android配置。

<manifest xmlns:tools="http://schemas.android.com/tools" ...>
<!-- ADD THESE TWO PERMISSIONS -->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

<application ...>

...

<!-- EDIT THE android:name ATTRIBUTE IN YOUR EXISTING "ACTIVITY" ELEMENT -->
<activity android:name="com.ryanheise.audioservice.AudioServiceActivity" ...>
...
</activity>

<!-- ADD THIS "SERVICE" element -->
<service android:name="com.ryanheise.audioservice.AudioService"
android:exported="true" tools:ignore="Instantiatable">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
</intent-filter>
</service>
<!-- ADD THIS "RECEIVER" element -->
<receiver android:name="com.ryanheise.audioservice.MediaButtonReceiver"
android:exported="true" tools:ignore="Instantiatable">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver> 
</application>
</manifest>

如果您正在更新元数据,您刚刚添加了视图dart文件的updatemetadata,否则设置为initstate像低于

在添加udioHandler.updateMediaItem((之前,您需要更新音频处理程序文件在此处输入图像描述

在此处输入图像描述

它对我来说很好

相关内容

  • 没有找到相关文章