Browse Source

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

newdev_shunjiawei
fdp 1 year ago
parent
commit
744d25f82a
  1. 8
      lib/modules/pairing/controllers/pairing_controller.dart
  2. 9
      local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt
  3. 194
      local_plugins/qq_music/android/src/main/kotlin/com/yunqiinnovation/qq_music/QQMusicSingleton.kt

8
lib/modules/pairing/controllers/pairing_controller.dart

@ -922,6 +922,7 @@ class PairingController extends GetxController with WidgetsBindingObserver {
}
List<int> macBytes = [];
List<int> 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) {

9
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
}

194
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<List<Map<String, Any?>>>) -> 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<Map<String, Any?>>) {
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<List<Map<String, Any?>>>) -> Unit
) {
Log.d(TAG, "开始 ${actionName}")
ensureMusicManager(context!!, object: QQMusicManager.BindCallback{
override fun onSuccess(){
action(musicManager!!, object : QQMusicManager.SearchCallback {
override fun onSuccess(songs: List<Map<String, Any?>>) {
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>) -> 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

Loading…
Cancel
Save