Flutter audio_service:通知不会消失

问题描述 投票:0回答:1

我正在开发一个应用程序,允许用户浏览一系列电子书,选择一本,然后决定阅读或收听它。还可以在阅读和听力之间切换。因此,有单独的视图用于收听、阅读或浏览有声读物。

我正在使用 Flutter 插件:audio_service 和 just_audio 来实现有声读物播放。在应用程序单元期间,我创建了自己的 AudioHandler,如下所示:

class AudioHandler extends BaseAudioHandler with SeekHandler {
  static final AudioHandler _singleton = AudioHandler._();

  static Future<void> init() async {
    var audioService = await AudioService.init(
      builder: () => AudioHandler(),
      config: const AudioServiceConfig(
        androidNotificationChannelId: 'nl.dropcatcher.sermons.channel.audio',
        androidNotificationChannelName: 'Sermon playback',
        androidStopForegroundOnPause: false,
        fastForwardInterval: Duration(seconds: 10),
        rewindInterval: Duration(seconds: 10),
      ),
    );
    audioService.playbackState.add(PlaybackState(
      controls: [
        MediaControl.pause,
      ],
      systemActions: const {
        MediaAction.seek,
        MediaAction.seekForward,
        MediaAction.seekBackward,
      },
      androidCompactActionIndices: const [0],
      processingState: AudioProcessingState.buffering,
      playing: false,
      updatePosition: Duration.zero,
      bufferedPosition: Duration.zero,
      speed: 1.0,
      queueIndex: 0,
    ));
  }

  factory AudioHandler() {
    return _singleton;
  }
  AudioHandler._();
}

然后在有声读物播放器视图中,我使用 AudioPlayer 播放实际的有声读物并在视图关闭时将其释放:

class _SermonPlayerState extends State<_SermonPlayerWidget> {
  final AudioPlayer player = AudioPlayer();

  @override
  void initState() {
    // ...
    player.play();
  }
 
  @override
  void dispose() {
    // ...
    AudioHandler().stop();
    player.dispose();
    super.dispose();
  }
}  

但是,带有播放器控制按钮的 Android 通知(当 AudioPlayer 开始播放时由 audio_service 创建)在 dispose() 之后仍然存在,即使它不再适用。事实上,当我从 Flutter 调试器重新加载应用程序时,它甚至仍然存在。更令人困惑的是,在 Web 版本中,它起作用了 - 一旦 AudioPlayer 被释放,带有播放器按钮的浏览器通知就会消失。

我看不到任何以编程方式隐藏通知的 API。那么当用户不再位于音频播放器页面时如何摆脱它呢?

android flutter audio-service
1个回答
0
投票

我遇到了同样的问题,你找到解决方案了吗?

© www.soinside.com 2019 - 2024. All rights reserved.