mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
72 lines
2.3 KiB
Dart
72 lines
2.3 KiB
Dart
import 'package:PiliPlus/plugin/pl_player/controller.dart';
|
|
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;
|
|
|
|
setActive(bool active) {
|
|
session.setActive(active);
|
|
}
|
|
|
|
AudioSessionHandler() {
|
|
initSession();
|
|
}
|
|
|
|
Future<void> initSession() async {
|
|
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);
|
|
// 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);
|
|
// player.setVolume(player.volume.value * 2);
|
|
break;
|
|
case AudioInterruptionType.pause:
|
|
if (_playInterrupted) PlPlayerController.playIfExists();
|
|
//player.play();
|
|
break;
|
|
case AudioInterruptionType.unknown:
|
|
break;
|
|
}
|
|
_playInterrupted = false;
|
|
}
|
|
});
|
|
|
|
// 耳机拔出暂停
|
|
session.becomingNoisyEventStream.listen((_) {
|
|
PlPlayerController.pauseIfExists();
|
|
// final player = PlPlayerController.getInstance();
|
|
// if (player.playerStatus.playing) {
|
|
// player.pause();
|
|
// }
|
|
});
|
|
}
|
|
}
|