首页 > 解决方案 > audio_service 插件:AudioService.connected 返回 False

问题描述

初始化 AudioService 并成功播放音频后,但我“丢失”了 AudioService 连接,并且暂停或播放并且AudioService.playbackStateStream不更新。

我的 AudioService.start 在 initState 上调用:

  initPlaying() async {
    AudioService.start(
      backgroundTaskEntrypoint: _audioPlayerTaskEntrypoint,
      androidNotificationChannelName: 'Audio Service Demo',
      androidNotificationColor: 0xFF2196f3,
      androidNotificationIcon: 'mipmap/ic_launcher',
    );
  }

之后,在调试器中,AudioService.connected 的结果为 False。

这是我的CustomAudioPlayer课:

class CustomAudioPlayer extends BackgroundAudioTask {
  MediaItem mediaItem = MediaItem(
      id: 'audio_1',
      album: 'Igreja em Aracaju',
      title: 'Jesus é Deus',
      artUri: 'https://tecnocamp.info/assets/noimageavailable.jpg');

  Future<void> audioStart() async {
    await FlutterRadio.audioStart();
  }

  @override
  onStart(Map<String, dynamic> params) async {
    AudioServiceBackground.setMediaItem(mediaItem);
    AudioServiceBackground.setState(
        controls: [pauseControl, stopControl],
        playing: true,
        processingState: AudioProcessingState.ready);
    await audioStart();
    onPlay();
  }

  @override
  void onPlay() {
    AudioServiceBackground.setState(
        controls: [pauseControl, stopControl],
        playing: true,
        processingState: AudioProcessingState.ready);
    FlutterRadio.play(url: streamUrl);
  }

  @override
  void onPause() {
    AudioServiceBackground.setState(
        controls: [playControl, stopControl],
        playing: false,
        processingState: AudioProcessingState.ready);
    FlutterRadio.pause(url: streamUrl);
  }

  @override
  Future<void> onStop() async {
    await FlutterRadio.stop();
    exit(0);
    await super.onStop();
    await AudioServiceBackground.setState(
        controls: [],
        playing: false,
        processingState: AudioProcessingState.stopped);
  }

  @override
  Future onCustomAction(_function, params) {
    AudioServiceBackground.setMediaItem(MediaItem(
        id: params['mediaID'],
        album: params['mediaAlbum'],
        title: params['mediaTitle'],
        artUri: params['mediaCover']));
  }
}

我的完整应用程序可以查看:https ://github.com/yagoliveira92/radio-basic/tree/develop/

标签: flutter

解决方案


响应:我initPlaying()在几秒钟后将其放入屏幕中。把这个方法放在main()解决问题上。


推荐阅读