0

我正在使用audio_service颤振包。如果音频服务停止,我想弹出一个播放器页面。如何获取音频服务停止事件?我没有找到任何事件来检查服务是否停止

4

1 回答 1

1

(答案更新:从v0.18开始,服务在app运行时一直有效,所以不再需要检查。以下答案是针对v0.17及更早版本的。)

AudioService.runningtrue将在服务运行和不运行时发出false

要收听它何时从true变为false,您可以尝试以下操作:

// Cast runningStream from dynamic to the correct type.
final runningStream =
    AudioService.runningStream as ValueStream<bool>;
// Listen to stream pairwise and observe when it becomes false
runningStream.pairwise().listen((pair) {
  final wasRunning = pair.first;
  final isRunning = pair.last;
  if (wasRunning && !isRunning) {
    // take action
  }
});

如果您想收听stopped播放状态,则需要确保您的后台音频任务实际发出该状态更改onStop

  @override
  Future<void> onStop() async {
    await _player.dispose();
    // the "await" is important
    await AudioServiceBackground.setState(
        processingState: AudioProcessingState.stopped);
    // Shut down this task
    await super.onStop();
  }

这样,您可以在 UI 中侦听此状态:

AudioService.playbackStateStream.listen((state) {
  if (state.processingState == AudioProcessingState.stopped)) {
    // take action
  }
});
于 2021-02-23T06:42:44.057 回答