diff --git a/lib/modules/pairing/controllers/pairing_controller.dart b/lib/modules/pairing/controllers/pairing_controller.dart index df9198b89..99602941d 100644 --- a/lib/modules/pairing/controllers/pairing_controller.dart +++ b/lib/modules/pairing/controllers/pairing_controller.dart @@ -922,6 +922,7 @@ class PairingController extends GetxController with WidgetsBindingObserver { } List macBytes = []; + List tempBytes = []; if (Platform.isIOS) { for (int i = 7; i <= 12; i++) { // 每个字节异或0x5A @@ -930,6 +931,7 @@ class PairingController extends GetxController with WidgetsBindingObserver { } } else if (Platform.isAndroid) { for (int i = 9; i <= 14; i++) { + tempBytes.add(bytes[i]); // 每个字节异或0x5A int decodedByte = bytes[i] ^ 0x5A; macBytes.add(decodedByte); @@ -940,13 +942,15 @@ class PairingController extends GetxController with WidgetsBindingObserver { String extractedMac = macBytes .map((b) => b.toRadixString(16).padLeft(2, '0').toUpperCase()) .join(':'); - + String tempMac = tempBytes + .map((b) => b.toRadixString(16).padLeft(2, '0').toUpperCase()) + .join(':'); // 格式化当前设备MAC地址(确保格式一致) String formattedDeviceMac = deviceMac.replaceAll(':', '').toUpperCase(); String formattedExtractedMac = extractedMac.replaceAll(':', '').toUpperCase(); - print('设备MAC: $deviceMac, 提取的MAC: $extractedMac'); + print('设备MAC: $deviceMac, 提取的MAC: $extractedMac tempMac: $tempMac'); // 对比MAC地址 if (formattedDeviceMac == formattedExtractedMac) { diff --git a/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt b/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt index ebad04d7e..d2b474f56 100644 --- a/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt +++ b/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt @@ -475,16 +475,7 @@ object BleService { ret.add(info) } } - } else { - // 如果没找到匹配设备名的结果,返回所有扫描到的设备信息 - for (result in scanResults) { - val info = printDeviceInfo(result) - if (info != null) { - ret.add(info) - } - } } - return ret } diff --git a/local_plugins/qq_music/android/src/main/kotlin/com/yunqiinnovation/qq_music/QQMusicSingleton.kt b/local_plugins/qq_music/android/src/main/kotlin/com/yunqiinnovation/qq_music/QQMusicSingleton.kt index 4e371876a..5c87e6c94 100644 --- a/local_plugins/qq_music/android/src/main/kotlin/com/yunqiinnovation/qq_music/QQMusicSingleton.kt +++ b/local_plugins/qq_music/android/src/main/kotlin/com/yunqiinnovation/qq_music/QQMusicSingleton.kt @@ -423,52 +423,83 @@ class QQMusicSingleton private constructor() { action: (QQMusicManager, QQMusicManager.SearchCallback) -> Unit ): (callback: (Result>>) -> Unit) -> Unit { return lambda@{ callback -> - + if (!isQQMusicInstalled()){ callback(Result.failure(Exception("未安装QQ音乐软件,请先安装QQ音乐软件"))) return@lambda } - + val currentActivity = context if (currentActivity == null) { callback(Result.failure(Exception("Activity not available"))) return@lambda } - Log.d(TAG, "开始 ${actionName}") - ensureMusicManager(currentActivity,object: QQMusicManager. BindCallback{ - override fun onSuccess(){ - action(musicManager!!, object : QQMusicManager.SearchCallback { - override fun onSuccess(songs: List>) { - Log.d(TAG, "${actionName} 成功") - handler.post { - callback(Result.success(songs)) - } - } - - override fun onError(errorCode: Int, errorMessage: String) { - Log.d(TAG, "失败 ${actionName} 成功") - if (allagain > 0 && curragain < allagain){ //重试机制 - executeSearchbackAction(actionName,curragain+1,allagain,action) - }else{ - handler.post { - callback(Result.failure(Exception("$actionName 失败: $errorMessage"))) - } - } - } - }) + + // 添加登录状态检查 + if (!isLoggedIn()) { + Log.d(TAG, "用户未登录,开始自动登录") + login { loginResult -> + if (loginResult.isSuccess) { + Log.d(TAG, "自动登录成功,继续执行 ${actionName}") + // 登录成功后继续执行原操作 + executeSearchAction(actionName, curragain, allagain, action, callback) + } else { + Log.e(TAG, "自动登录失败: ${loginResult.exceptionOrNull()?.message}") + callback(Result.failure(Exception("用户未登录且自动登录失败: ${loginResult.exceptionOrNull()?.message}"))) + } } - override fun onError(errorCode: Int, errorMessage: String) { - if (allagain > 0 && curragain < allagain){ //重试机制 - executeSearchbackAction(actionName,curragain+1,allagain,action) - }else{ + return@lambda + } + + // 用户已登录,直接执行搜索操作 + executeSearchAction(actionName, curragain, allagain, action, callback) + } + } + + // 提取搜索执行逻辑为独立方法 + private fun executeSearchAction( + actionName: String, + curragain: Int, + allagain: Int, + action: (QQMusicManager, QQMusicManager.SearchCallback) -> Unit, + callback: (Result>>) -> Unit + ) { + Log.d(TAG, "开始 ${actionName}") + ensureMusicManager(context!!, object: QQMusicManager.BindCallback{ + override fun onSuccess(){ + action(musicManager!!, object : QQMusicManager.SearchCallback { + override fun onSuccess(songs: List>) { + Log.d(TAG, "${actionName} 成功") handler.post { - callback(Result.failure(Exception("$actionName 失败: $errorMessage"))) + callback(Result.success(songs)) + } + } + + override fun onError(errorCode: Int, errorMessage: String) { + Log.d(TAG, "失败 ${actionName} errorCode: $errorCode errorMessage:$errorMessage 当前重试${curragain}/${allagain}") + if (allagain > 0 && curragain < allagain){ //重试机制 + Log.d(TAG, "重试 ${actionName} 当前重试${curragain+1}/${allagain}") + executeSearchbackAction(actionName,curragain+1,allagain,action)(callback) + }else{ + handler.post { + callback(Result.failure(Exception("$actionName 失败: $errorMessage"))) + } } } + }) + } + override fun onError(errorCode: Int, errorMessage: String) { + Log.d(TAG, "失败 ${actionName} errorCode: $errorCode errorMessage:$errorMessage 当前重试${curragain}/${allagain}") + if (allagain > 0 && curragain < allagain){ //重试机制 + Log.d(TAG, "重试 ${actionName} 当前重试${curragain+1}/${allagain}") + executeSearchbackAction(actionName,curragain+1,allagain,action)(callback) + }else{ + handler.post { + callback(Result.failure(Exception("$actionName 失败: $errorMessage"))) + } } - }) - - } + } + }) } @@ -491,49 +522,80 @@ class QQMusicSingleton private constructor() { callback(Result.failure(Exception("Activity not available"))) return@lambda } - Log.d(TAG, "开始 ${actionName}") - ensureMusicManager(currentActivity,object: QQMusicManager. BindCallback{ - override fun onSuccess(){ - action(musicManager!!, object : QQMusicManager.PlayCallback { - override fun onSuccess() { - Log.d(TAG, "${actionName}成功") - handler.post { - callback(Result.success(Unit)) - } + + // 添加登录状态检查 + if (!isLoggedIn()) { + Log.d(TAG, "用户未登录,开始自动登录") + login { loginResult -> + if (loginResult.isSuccess) { + Log.d(TAG, "自动登录成功,继续执行 ${actionName}") + // 登录成功后继续执行原操作 + executePlayAction(actionName, curragain, allagain, action, callback) + } else { + Log.e(TAG, "自动登录失败: ${loginResult.exceptionOrNull()?.message}") + callback(Result.failure(Exception("用户未登录且自动登录失败: ${loginResult.exceptionOrNull()?.message}"))) + } + } + return@lambda + } + + // 用户已登录,直接执行搜索操作 + executePlayAction(actionName, curragain, allagain, action, callback) + + } + } + + private fun executePlayAction( + actionName: String, + curragain:Int, + allagain:Int, + action: (QQMusicManager, QQMusicManager.PlayCallback) -> Unit, + callback: (Result) -> Unit + ) { + Log.d(TAG, "开始 ${actionName}") + ensureMusicManager(context!!,object: QQMusicManager. BindCallback{ + override fun onSuccess(){ + action(musicManager!!, object : QQMusicManager.PlayCallback { + override fun onSuccess() { + Log.d(TAG, "${actionName}成功") + handler.post { + callback(Result.success(Unit)) } + } - override fun onError(errorCode: Int, errorMessage: String) { - if (allagain > 0 && curragain < allagain){ //重试机制 - executePlaybackAction(actionName,curragain+1,allagain,action) - }else{ - handler.post { - Log.e(TAG, "${actionName}失败: $errorCode $errorMessage") - if (errorCode == -1){ - musicManager?.bindQQMusicApiService() - callback(Result.failure(Exception("播放失败: $errorMessage"))) - } else if (errorCode == 1030) { - callback(Result.success(Unit)) - }else{ - callback(Result.failure(Exception("播放失败: $errorMessage"))) - } + override fun onError(errorCode: Int, errorMessage: String) { + if (allagain > 0 && curragain < allagain){ //重试机制 + executePlaybackAction(actionName,curragain+1,allagain,action)(callback) + }else{ + handler.post { + Log.e(TAG, "${actionName}失败: $errorCode $errorMessage") + if (errorCode == -1){ + musicManager?.bindQQMusicApiService() + callback(Result.failure(Exception("播放失败: $errorMessage"))) + } else if (errorCode == 1030) { + callback(Result.success(Unit)) + }else{ + callback(Result.failure(Exception("播放失败: $errorMessage"))) } } } - }) - } - override fun onError(errorCode: Int, errorMessage: String) { - Log.e(TAG, "${actionName}失败: $errorCode $errorMessage") - if (allagain > 0 && curragain < allagain){ //重试机制 - executePlaybackAction(actionName,curragain+1,allagain,action) - }else{ - callback(Result.failure(Exception("$actionName 失败: $errorMessage"))) } + }) + } + override fun onError(errorCode: Int, errorMessage: String) { + Log.e(TAG, "${actionName}失败: $errorCode $errorMessage") + if (allagain > 0 && curragain < allagain){ //重试机制 + executePlaybackAction(actionName,curragain+1,allagain,action)(callback) + }else{ + callback(Result.failure(Exception("$actionName 失败: $errorMessage"))) } - }) + } + }) - } } - + + + private fun executeInfoAction( actionName: String, action: (QQMusicManager, QQMusicManager.InfoCallback) -> Unit