diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index 15a7289ed..543ed1257 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -399,11 +399,6 @@ class PlPlayerController with BlockConfigMixin { return _playCallBack?.call(); } - // try to get PlayerStatus - static PlayerStatus? getPlayerStatusIfExists() { - return _instance?.playerStatus.value; - } - static Future pauseIfExists({ bool notify = true, bool isInterrupt = false, @@ -420,17 +415,6 @@ class PlPlayerController with BlockConfigMixin { await _instance?.seekTo(position, isSeek: isSeek); } - static double? getVolumeIfExists() { - return _instance?.volume.value; - } - - static Future? setVolumeIfExists( - double volumeNew, { - bool showIndicator = true, - }) { - return _instance?.setVolume(volumeNew, showIndicator: showIndicator); - } - Box video = GStorage.video; bool visible = true; diff --git a/lib/services/audio_session.dart b/lib/services/audio_session.dart index 3155b35c8..931bb4fca 100644 --- a/lib/services/audio_session.dart +++ b/lib/services/audio_session.dart @@ -3,11 +3,11 @@ import 'package:PiliPlus/plugin/pl_player/models/play_status.dart'; import 'package:audio_session/audio_session.dart'; class AudioSessionHandler { - late AudioSession session; - bool _playInterrupted = false; + late AudioSession _session; + bool _shouldResume = false; Future setActive(bool active) { - return session.setActive(active); + return _session.setActive(active); } AudioSessionHandler() { @@ -15,61 +15,41 @@ class AudioSessionHandler { } Future initSession() async { - session = await AudioSession.instance; - session.configure(const AudioSessionConfiguration.music()); + _session = await AudioSession.instance; + _session.configure(const AudioSessionConfiguration.music()); - session.interruptionEventStream.listen((event) { - final playerStatus = PlPlayerController.getPlayerStatusIfExists(); - // final player = PlPlayerController.getInstance(); - if (event.begin) { - if (playerStatus != PlayerStatus.playing) return; - // if (!player.playerStatus.playing) return; - switch (event.type) { - case AudioInterruptionType.duck: - PlPlayerController.setVolumeIfExists( - (PlPlayerController.getVolumeIfExists() ?? 0) * 0.5, - showIndicator: false, - ); - // player.setVolume(player.volume.value * 0.5); - break; - case AudioInterruptionType.pause: - PlPlayerController.pauseIfExists(isInterrupt: true); - // player.pause(isInterrupt: true); - _playInterrupted = true; - break; - case AudioInterruptionType.unknown: - PlPlayerController.pauseIfExists(isInterrupt: true); - // player.pause(isInterrupt: true); - _playInterrupted = true; - break; - } - } else { - switch (event.type) { - case AudioInterruptionType.duck: - PlPlayerController.setVolumeIfExists( - (PlPlayerController.getVolumeIfExists() ?? 0) * 2, - showIndicator: false, - ); - // player.setVolume(player.volume.value * 2); - break; - case AudioInterruptionType.pause: - if (_playInterrupted) PlPlayerController.playIfExists(); - //player.play(); - break; - case AudioInterruptionType.unknown: - break; - } - _playInterrupted = false; - } - }); + _session.interruptionEventStream.listen(_onInterrupted); // 耳机拔出暂停 - session.becomingNoisyEventStream.listen((_) { + _session.becomingNoisyEventStream.listen((_) { PlPlayerController.pauseIfExists(); - // final player = PlPlayerController.getInstance(); - // if (player.playerStatus.playing) { - // player.pause(); - // } }); } + + void _onInterrupted(AudioInterruptionEvent event) { + if (event.begin) { + final player = PlPlayerController.instance; + if (player == null || !player.playerStatus.isPlaying) return; + switch (event.type) { + case .duck: + player.setVolume(player.volume.value * 0.5, showIndicator: false); + case .pause: + case .unknown: + _shouldResume = true; + player.pause(isInterrupt: true); + } + } else { + switch (event.type) { + case .duck: + final player = PlPlayerController.instance; + player?.setVolume(player.volume.value * 2, showIndicator: false); + case .pause: + if (_shouldResume) { + _shouldResume = false; + PlPlayerController.instance?.play(); + } + case .unknown: + } + } + } }