Browse Source

feat(translation): 增加QQ音乐播放暂停支持

在切换翻译模式时,暂停QQ音乐播放并在退出时恢复播放,避免音频冲突
newdev_shunjiawei
liwei1dao 8 months ago
parent
commit
5b2e356906
  1. 43
      lib/modules/translation/controllers/translation_controller.dart

43
lib/modules/translation/controllers/translation_controller.dart

@ -11,6 +11,7 @@ import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:device_info_plus/device_info_plus.dart'; import 'package:device_info_plus/device_info_plus.dart';
import 'package:pip/pip.dart'; import 'package:pip/pip.dart';
import 'package:voitrans/data/services/qq_music.dart';
import '../../../data/services/ast_service.dart'; import '../../../data/services/ast_service.dart';
import '../../../data/services/bluetooth_manager.dart'; import '../../../data/services/bluetooth_manager.dart';
import '../../../data/services/music_manager.dart'; import '../../../data/services/music_manager.dart';
@ -54,6 +55,7 @@ class TranslationController extends GetxController with WidgetsBindingObserver {
final BluetoothManager bluetoothManager = Get.find<BluetoothManager>(); final BluetoothManager bluetoothManager = Get.find<BluetoothManager>();
final BleManager bleManager = Get.find<BleManager>(); final BleManager bleManager = Get.find<BleManager>();
final _musiceManager = Get.find<MusicManager>(); final _musiceManager = Get.find<MusicManager>();
final _qqMusicManager = Get.find<QqMusicService>();
late final UsageStatsService _usageService; late final UsageStatsService _usageService;
// 安卓悬浮窗管理器 // 安卓悬浮窗管理器
late final FloatingWindowManager _floatingWindowManager; late final FloatingWindowManager _floatingWindowManager;
@ -79,6 +81,7 @@ class TranslationController extends GetxController with WidgetsBindingObserver {
bool _audioSourceType = false; // 音频输入源类型 bool _audioSourceType = false; // 音频输入源类型
bool isPlayback = false; // 是否开启播放 bool isPlayback = false; // 是否开启播放
bool isContinuePlaying = false; // 是否继续播放 bool isContinuePlaying = false; // 是否继续播放
bool _isContinueQqMusicPlaying = false; // 是否继续播放QQ音乐
// 存储相关配置 // 存储相关配置
static const String _sourceLanguageKey = 'translation_source_language'; static const String _sourceLanguageKey = 'translation_source_language';
@ -330,7 +333,10 @@ class TranslationController extends GetxController with WidgetsBindingObserver {
} }
/// 更改翻译模式 /// 更改翻译模式
/// [mode] 翻译模式:simultaneous(同声传译)、audioVideo(音视频)、call(通话)、faceToFace(面对面) /// 参数:
/// - [mode] 翻译模式:simultaneous(同声传译)、audioVideo(音视频)、call(通话)、faceToFace(面对面)
/// 返回值:无
/// 异常:可能抛出底层服务调用异常
Future<void> changeTranslationMode(String mode) async { Future<void> changeTranslationMode(String mode) async {
currentMode.value = mode; currentMode.value = mode;
currentModeTitle.value = _getModeTitle(mode); currentModeTitle.value = _getModeTitle(mode);
@ -338,6 +344,10 @@ class TranslationController extends GetxController with WidgetsBindingObserver {
loadTranslationHistory(); loadTranslationHistory();
//stopAll(); //stopAll();
if (mode == 'faceToFace' || mode == 'call' || mode == 'simultaneous') {
await suspendOtherServices();
}
if (Platform.isAndroid && (mode == 'call' || mode == 'audioVideo')) { if (Platform.isAndroid && (mode == 'call' || mode == 'audioVideo')) {
try { try {
_floatingWindowManager.setLastTranslationMode(mode); _floatingWindowManager.setLastTranslationMode(mode);
@ -741,16 +751,26 @@ class TranslationController extends GetxController with WidgetsBindingObserver {
} }
/// 暂停其他服务(如音乐播放) /// 暂停其他服务(如音乐播放)
/// 参数:无
/// 返回值:无
/// 异常:内部捕获并记录日志,不向外抛出
Future<void> suspendOtherServices() async { Future<void> suspendOtherServices() async {
try { try {
var status = await _musiceManager.getStatus(); if (!isContinuePlaying) {
var isPlaying = status['isPlaying'] ?? false; final status = await _musiceManager.getStatus();
final bool isPlaying = status['isPlaying'] ?? false;
if (isPlaying == true) {
isContinuePlaying = true;
await _musiceManager.pause();
}
}
if (isPlaying == true) { if (!_isContinueQqMusicPlaying) {
isContinuePlaying = true; await _qqMusicManager.syncCurrentPlayInfo();
await _musiceManager.pause(); if (_qqMusicManager.isPlaying.value == true) {
} else { _isContinueQqMusicPlaying = true;
isContinuePlaying = false; await _qqMusicManager.pauseMusic();
}
} }
} catch (e) { } catch (e) {
Logger.error('暂停其他服务失败: ${e.toString()}'); Logger.error('暂停其他服务失败: ${e.toString()}');
@ -758,11 +778,18 @@ class TranslationController extends GetxController with WidgetsBindingObserver {
} }
/// 恢复其他服务(如音乐播放) /// 恢复其他服务(如音乐播放)
/// 参数:无
/// 返回值:无
/// 异常:内部捕获并记录日志,不向外抛出
Future<void> restoreOtherServices() async { Future<void> restoreOtherServices() async {
try { try {
if (isContinuePlaying) await _musiceManager.resume(); if (isContinuePlaying) await _musiceManager.resume();
if (_isContinueQqMusicPlaying) await _qqMusicManager.resumeMusic();
} catch (e) { } catch (e) {
Logger.error('恢复其他服务失败: ${e.toString()}'); Logger.error('恢复其他服务失败: ${e.toString()}');
} finally {
isContinuePlaying = false;
_isContinueQqMusicPlaying = false;
} }
} }

Loading…
Cancel
Save