app-starlock/lib/talk/other/audio_player_manager.dart

102 lines
2.6 KiB
Dart

import 'package:audioplayers/audioplayers.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/talk/starChart/constant/udp_constant.dart';
import 'package:star_lock/talk/starChart/proto/generic.pb.dart';
import 'package:star_lock/talk/starChart/star_chart_manage.dart';
class AudioPlayerManager {
// 私有构造函数,防止外部创建实例
AudioPlayerManager._();
static bool _ringtoneEnabled = true;
// 禁用铃声
void disableRingtone() {
_ringtoneEnabled = false;
}
// 启用铃声
void enableRingtone() {
_ringtoneEnabled = true;
}
// 检查铃声是否启用
bool isRingtoneEnabled() {
return _ringtoneEnabled;
}
// 静态变量保存单例对象
static final AudioPlayerManager _instance = AudioPlayerManager._();
// 工厂构造函数,总是返回相同的实例
factory AudioPlayerManager() => _instance;
// 单例的 AudioPlayer 实例
final AudioPlayer _audioPlayer = AudioPlayer();
// 播放状态,防止重复播放
bool _isPlaying = false;
// 播放铃声
Future<void> playRingtone() async {
// 检查铃声是否被启用
if (!isRingtoneEnabled()) {
log(text: 'Ringtone is disabled, skipping playback.');
return;
}
if (_isPlaying) {
log(text: 'Ringtone is already playing.');
return;
}
try {
await _audioPlayer.setReleaseMode(ReleaseMode.loop);
await _audioPlayer.play(AssetSource('ring1.mp3'));
_isPlaying = true;
log(text: 'Ringtone started playing.');
} catch (e) {
_isPlaying = false;
log(text: 'Error playing ringtone: $e');
}
}
// 停止播放铃声
Future<void> stopRingtone() async {
try {
_audioPlayer.setReleaseMode(ReleaseMode.loop);
await _audioPlayer.stop();
_isPlaying = false;
log(text: 'Ringtone stopped.');
} catch (e) {
_isPlaying = false;
log(text: 'Error stopping ringtone: $e');
}
}
// 其他可能的方法,例如暂停、继续等
Future<void> pauseRingtone() async {
try {
await _audioPlayer.pause();
_isPlaying = false;
log(text: 'Ringtone paused.');
} catch (e) {
_isPlaying = false;
log(text: 'Error pausing ringtone: $e');
}
}
Future<void> resumeRingtone() async {
try {
await _audioPlayer.resume();
_isPlaying = true;
log(text: 'Ringtone resumed.');
} catch (e) {
_isPlaying = false;
log(text: 'Error resuming ringtone: $e');
}
}
// 日志方法
void log({required String text}) {
AppLog.log('AudioPlayerManager==========$text');
}
}