fix: 多层播放页快速返回首页致后台播放、通知未消失

This commit is contained in:
orz12
2024-06-01 12:06:50 +08:00
parent 8df87556b7
commit 62e0a0c588
4 changed files with 113 additions and 35 deletions

View File

@@ -18,29 +18,38 @@ class AudioSessionHandler {
session.configure(const AudioSessionConfiguration.music());
session.interruptionEventStream.listen((event) {
final player = PlPlayerController.getInstance();
final playerStatus = PlPlayerController.getPlayerStatusIfExists();
// final player = PlPlayerController.getInstance();
if (event.begin) {
if (!player.playerStatus.playing) return;
if (playerStatus != PlayerStatus.playing) return;
// if (!player.playerStatus.playing) return;
switch (event.type) {
case AudioInterruptionType.duck:
player.setVolume(player.volume.value * 0.5);
PlPlayerController.setVolumeIfExists(
(PlPlayerController.getVolumeIfExists() ?? 0) * 0.5);
// player.setVolume(player.volume.value * 0.5);
break;
case AudioInterruptionType.pause:
player.pause(isInterrupt: true);
PlPlayerController.pauseIfExists(isInterrupt: true);
// player.pause(isInterrupt: true);
_playInterrupted = true;
break;
case AudioInterruptionType.unknown:
player.pause(isInterrupt: true);
PlPlayerController.pauseIfExists(isInterrupt: true);
// player.pause(isInterrupt: true);
_playInterrupted = true;
break;
}
} else {
switch (event.type) {
case AudioInterruptionType.duck:
player.setVolume(player.volume.value * 2);
PlPlayerController.setVolumeIfExists(
(PlPlayerController.getVolumeIfExists() ?? 0) * 2);
// player.setVolume(player.volume.value * 2);
break;
case AudioInterruptionType.pause:
if (_playInterrupted) player.play();
if (_playInterrupted) PlPlayerController.playIfExists();
//player.play();
break;
case AudioInterruptionType.unknown:
break;
@@ -51,10 +60,11 @@ class AudioSessionHandler {
// 耳机拔出暂停
session.becomingNoisyEventStream.listen((_) {
final player = PlPlayerController.getInstance();
if (player.playerStatus.playing) {
player.pause();
}
PlPlayerController.pauseIfExists();
// final player = PlPlayerController.getInstance();
// if (player.playerStatus.playing) {
// player.pause();
// }
});
}
}