import '../../core/utils/logger.dart'; import 'package:get/get.dart'; import 'package:music_service/music_service.dart'; import 'package:permission_handler/permission_handler.dart'; import '../../core/utils/permission_util.dart'; import 'package:flutter/material.dart'; //音乐播放管理 class MusicManager extends GetxService { static MusicManager get to => Get.find(); // 音乐服务实例 final MusicService _musicService = MusicService(); /// 初始化 @override void onInit() { super.onInit(); // final context = Get.context; // if (context == null) { // Logger.error('无法获取 BuildContext'); // return; // } //requestNotificationPermission(); Logger.info('初始化权限请求'); } Future requestNotificationPermission() async { final granted = await PermissionUtil.instance.requestPermission( //context: context, permissionType: Permission.notification, permissionName: 'notificationPermission'.tr, explanationText: 'notificationPermissionExplanation'.tr, permanentDenialText: 'notificationPermissionPermanentDenial'.tr, settingsButtonText: 'goToSettings'.tr, ); if (!granted) { Logger.warning('通知权限未被授予'); return; } Logger.info('通知权限已授予'); } /// 释放资源 @override void onClose() { super.onClose(); } //播放 Future play(Map song) async { await _musicService.playMusic(song); } //暂停 Future pause() async { await _musicService.pauseMusic(); } //继续 Future resume() async { await _musicService.resumeMusic(); } //状态 Future> getStatus() async { return await _musicService.getStatus(); } //获取播放进度 Future> getProgress() async { return await _musicService.getProgress(); } //跳转到指定位置 Future seekTo(int positionMs) async { await _musicService.seekTo(positionMs); } /// 播放音乐列表 Future playPlaylist(List> playlist) async { await _musicService.playMusicPlaylist(playlist); } /// 更新媒体会话进度信息 Future updateMediaSessionProgress( int currentPosition, int duration, double progress) async { try { await _musicService.updateMediaSessionProgress( currentPosition, duration, progress); } catch (e) { Logger.d('MusicManager', '更新媒体会话进度失败: $e'); } } /// 设置媒体会话回调 Future setMediaSessionCallbacks({ required Function() onPlay, required Function() onPause, required Function() onNext, required Function() onPrevious, required Function(int) onSeekTo, required Function() onStop, required Function(int, int, int, double) onProgress, }) async { try { await _musicService.setMediaSessionCallbacks( onPlay: onPlay, onPause: onPause, onNext: onNext, onPrevious: onPrevious, onSeekTo: onSeekTo, onStop: onStop, onProgress: onProgress, ); } catch (e) { Logger.d('MusicManager', '设置媒体会话回调失败: $e'); } } /// 更新媒体会话元数据 Future updateMediaSessionMetadata(Map song) async { try { await _musicService.updateMediaSessionMetadata(song); } catch (e) { Logger.d('MusicManager', '更新媒体会话元数据失败: $e'); } } /// 更新媒体会话播放状态 Future updateMediaSessionPlaybackState(bool isPlaying) async { try { await _musicService.updateMediaSessionPlaybackState(isPlaying); } catch (e) { Logger.d('MusicManager', '更新媒体会话播放状态失败: $e'); } } }