Browse Source

Merge branch 'main' of https://github.com/deepcloud2048/deep_voice into tanls

weicu
tanlongsheng 2 years ago
parent
commit
4ffe141fe9
  1. 55
      android/app/src/main/kotlin/com/example/deep_voice/VoiceInteractionService.kt
  2. 2
      lib/data/services/classic_bluetooth_service.dart

55
android/app/src/main/kotlin/com/example/deep_voice/VoiceInteractionService.kt

@ -220,9 +220,33 @@ class VoiceInteractionService : Service() {
// 设置回调 // 设置回调
mediaSession.setCallback(object : MediaSessionCompat.Callback() { mediaSession.setCallback(object : MediaSessionCompat.Callback() {
override fun onMediaButtonEvent(mediaButtonEvent: Intent): Boolean { override fun onMediaButtonEvent(mediaButtonEvent: Intent): Boolean {
FileLogger.d(TAG, "initMediaSession收到媒体按钮事件: $mediaButtonEvent") val keyEvent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
handleDoubleClick() mediaButtonEvent.getParcelableExtra(Intent.EXTRA_KEY_EVENT, KeyEvent::class.java)
return true } else {
@Suppress("DEPRECATION")
mediaButtonEvent.getParcelableExtra(Intent.EXTRA_KEY_EVENT) as? KeyEvent
}
if (keyEvent != null) {
// 仅处理按下操作和相关按键
if (keyEvent.action == KeyEvent.ACTION_DOWN) {
when (keyEvent.keyCode) {
KeyEvent.KEYCODE_HEADSETHOOK,
KeyEvent.KEYCODE_MEDIA_PLAY,
KeyEvent.KEYCODE_MEDIA_PAUSE,
KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE -> {
FileLogger.d(TAG, "接收到相关媒体按钮: keyCode=${keyEvent.keyCode}")
handleDoubleClick()
return true
}
}
}
FileLogger.d(TAG, "忽略不相关媒体按钮: action=${keyEvent.action}, keyCode=${keyEvent.keyCode}")
return false
}
FileLogger.d(TAG, "收到无按键的媒体按钮事件")
return false
} }
override fun onPlay() { override fun onPlay() {
@ -650,10 +674,8 @@ class VoiceInteractionService : Service() {
if (keyEvent != null) { if (keyEvent != null) {
FileLogger.d(TAG, "从Intent中解析到按键事件: action=${keyEvent.action}, keyCode=${keyEvent.keyCode}") FileLogger.d(TAG, "从Intent中解析到按键事件: action=${keyEvent.action}, keyCode=${keyEvent.keyCode}")
// 使用统一的按键处理逻辑
handleKeyEvent(keyEvent) handleKeyEvent(keyEvent)
} else {
FileLogger.d(TAG, "Intent中没有按键事件,直接处理双击")
handleDoubleClick()
} }
} else if (intent?.action == ACTION_PAUSE_VOICE_INTERACTION) { } else if (intent?.action == ACTION_PAUSE_VOICE_INTERACTION) {
// 处理来自 Flutter 的暂停请求 // 处理来自 Flutter 的暂停请求
@ -663,7 +685,7 @@ class VoiceInteractionService : Service() {
FileLogger.d(TAG, "收到其他Intent: action=${intent?.action}") FileLogger.d(TAG, "收到其他Intent: action=${intent?.action}")
} }
// 让 MediaSession 处理 Intent // 让 MediaSession 处理 Intent,MediaSession将通过callback处理事件
try { try {
MediaButtonReceiver.handleIntent(mediaSession, intent) MediaButtonReceiver.handleIntent(mediaSession, intent)
FileLogger.d(TAG, "MediaButtonReceiver处理Intent完成") FileLogger.d(TAG, "MediaButtonReceiver处理Intent完成")
@ -680,14 +702,13 @@ class VoiceInteractionService : Service() {
private fun handleKeyEvent(keyEvent: KeyEvent) { private fun handleKeyEvent(keyEvent: KeyEvent) {
FileLogger.d(TAG, "处理按键事件: action=${keyEvent.action}, keyCode=${keyEvent.keyCode}") FileLogger.d(TAG, "处理按键事件: action=${keyEvent.action}, keyCode=${keyEvent.keyCode}")
// 只处理按下操作和相关媒体按键
if (keyEvent.action == KeyEvent.ACTION_DOWN) { if (keyEvent.action == KeyEvent.ACTION_DOWN) {
when (keyEvent.keyCode) { when (keyEvent.keyCode) {
KeyEvent.KEYCODE_MEDIA_PLAY -> { KeyEvent.KEYCODE_MEDIA_PLAY,
FileLogger.d(TAG, "处理MEDIA_PLAY按键") KeyEvent.KEYCODE_MEDIA_PAUSE,
handleDoubleClick() KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE -> {
} FileLogger.d(TAG, "处理标准媒体按键: ${keyEvent.keyCode}")
KeyEvent.KEYCODE_MEDIA_PAUSE -> {
FileLogger.d(TAG, "处理MEDIA_PAUSE按键")
handleDoubleClick() handleDoubleClick()
} }
KeyEvent.KEYCODE_HEADSETHOOK -> { KeyEvent.KEYCODE_HEADSETHOOK -> {
@ -712,16 +733,12 @@ class VoiceInteractionService : Service() {
} }
lastKeyEventTime = currentTime lastKeyEventTime = currentTime
} }
KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE -> {
FileLogger.d(TAG, "处理MEDIA_PLAY_PAUSE按键")
handleDoubleClick()
}
else -> { else -> {
FileLogger.d(TAG, "处理其他按键: ${keyEvent.keyCode}") FileLogger.d(TAG, "忽略不相关的按键: ${keyEvent.keyCode}")
} }
} }
} else { } else {
FileLogger.d(TAG, "非ACTION_DOWN事件: ${keyEvent.action}") FileLogger.d(TAG, "忽略非ACTION_DOWN事件: ${keyEvent.action}")
} }
} }

2
lib/data/services/classic_bluetooth_service.dart

@ -421,7 +421,7 @@ class ClassicBluetoothService extends GetxService {
/// 打开蓝牙设置 /// 打开蓝牙设置
Future<bool> openBluetoothSettings() async { Future<bool> openBluetoothSettings() async {
try { try {
await AppSettings.openAppSettings(); await AppSettings.openAppSettings(type: AppSettingsType.bluetooth);
return true; return true;
} catch (e) { } catch (e) {
Logger.error('打开蓝牙设置失败: $e'); Logger.error('打开蓝牙设置失败: $e');

Loading…
Cancel
Save