解决蓝牙耳机在连接后手表重启,下拉菜单耳机状态和蓝牙耳机界面耳机连接状态不一致问题 1647/2
authorluozheng <1732036298@qq.com>
Fri, 7 Feb 2025 07:35:24 +0000 (15:35 +0800)
committerluozheng <1732036298@qq.com>
Fri, 7 Feb 2025 07:35:24 +0000 (15:35 +0800)
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothDeviceCaseListAdapter.cpp
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp

index c59fc5b..c1892ab 100644 (file)
@@ -115,7 +115,7 @@ namespace OHOS
                           lastAddr->addr[3] == 0 && lastAddr->addr[4] == 0 && lastAddr->addr[5] == 0) &&
                             ret)
                         {
-                            BluetoothModel::GetInstance()->SetTagConnectNew(false);
+                            BluetoothModel::GetInstance()->SetTagConnectNew(false); //主动断开连接不需要回连该设备
                             errcode_t retVal = gap_disconnect_remote_device(lastAddr);
                             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[gap_disconnect_remote_device] retVal =  %d", retVal);
                         }
index 4bc004d..96e50c9 100644 (file)
@@ -555,6 +555,7 @@ bool BluetoothModel::IsTagConnectView(void)
     return tagConnectView;\r
 }\r
 \r
+//设置是否需要跳转连接失败界面\r
 void BluetoothModel::SetTagDisconnectView(bool tag)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothModel::SetTagDisconnectView:%d", tag);\r
@@ -582,13 +583,13 @@ bool BluetoothModel::IsTagReturnToDeviceListView(void)
     return tagReturnToDeviceListView;\r
 }\r
 \r
-// 判断断开连接时是否需要马上连接新设备\r
+// 获取断开连接时是否需要马上连接新设备\r
 bool BluetoothModel::IsTagConnectNew(void)\r
 {\r
     return tagConnectNew;\r
 }\r
 \r
-// è\8e·å\8f\96断开连接时是否需要马上连接新设备\r
+// è®¾ç½®断开连接时是否需要马上连接新设备\r
 void BluetoothModel::SetTagConnectNew(bool tag)\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothModel::SetTagConnectNew:%d", tag);\r
@@ -607,6 +608,7 @@ bool BluetoothModel::IsTagScanDeviceClicked(void)
     return tagScanDeviceClicked;\r
 }\r
 \r
+//检查给定的 BluetoothCaseInfo 结构体实例 caseInfo 所代表的蓝牙设备是否已经存在于已连接设备列表中\r
 bool BluetoothModel::CheckExistConnedList(BluetoothCaseInfo caseInfo)\r
 {\r
     ListNode<BluetoothCaseInfo> *node = btConnedDevicesList_ ->Begin();\r
@@ -642,7 +644,8 @@ bool BluetoothModel::FindNameByAddr(BluetoothCaseInfo &listInfo, BluetoothCaseIn
         return false;\r
     }\r
 }\r
-\r
+//在已连接设备列表 btConnedDevicesList_ 和扫描设备列表 btScansDevicesList_ \r
+//中查找与输入的 BluetoothCaseInfo 结构体实例 caseInfo 地址匹配的设备,并尝试获取该设备的名称\r
 bool BluetoothModel::FindNameFromList(BluetoothCaseInfo *caseInfo)\r
 {\r
     ListNode<BluetoothCaseInfo> *node = btConnedDevicesList_->Begin();\r
@@ -699,6 +702,11 @@ int BluetoothModel::ConnectRemoteDevice(const bd_addr_t *addr)
 bool BluetoothModel::ConnectRemoteCheck(const bd_addr_t *addr)\r
 {\r
     bool ret;\r
+    if ((remoteConnectAddr.addr[0] == 0) && (remoteConnectAddr.addr[1] == 0) &&\r
+        (remoteConnectAddr.addr[2] == 0) && (remoteConnectAddr.addr[3] == 0) &&\r
+        (remoteConnectAddr.addr[4] == 0) && (remoteConnectAddr.addr[5] == 0)) {\r
+        return true;\r
+    } \r
     if ((remoteConnectAddr.addr[0] == addr->addr[0]) && (remoteConnectAddr.addr[1] == addr->addr[1]) &&\r
         (remoteConnectAddr.addr[2] == addr->addr[2]) && (remoteConnectAddr.addr[3] == addr->addr[3]) &&\r
         (remoteConnectAddr.addr[4] == addr->addr[4]) && (remoteConnectAddr.addr[5] == addr->addr[5])) {\r
@@ -930,7 +938,7 @@ void HandleBeforeChangeView()
     }\r
 }\r
 \r
-//处理蓝牙耳机连接成功操作\r
+//处理蓝牙耳机连接成功的UI操作\r
 static void ACLConnectionSuss(const bd_addr_t &bdAddr)\r
 {\r
     // 判断是否已退出蓝牙模块(无需跳转)\r
@@ -940,7 +948,7 @@ static void ACLConnectionSuss(const bd_addr_t &bdAddr)
         return;\r
     }\r
     // 成功提示\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GAP_ACL_STATE_CONNECTED");\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "蓝牙耳机连接成功");\r
     HandleBeforeChangeView();\r
     if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
         JumpView *jumpView = JumpView::GetInstance();\r
@@ -963,7 +971,7 @@ static void ACLConnectionSuss(const bd_addr_t &bdAddr)
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ACLConnectionSuss tipsSuccMessageView GetInstance fail");\r
         return;\r
     }\r
-    tipsSuccMessageView->RefreshNameLabel(bdAddr);\r
+    tipsSuccMessageView->RefreshNameLabel(bdAddr); //更新连接成功的提示视图的蓝牙名称\r
     /* -------------------------------------------------------------------------- */\r
     if (true != OHOS::ConfigModel::GetInstance()->GetDnotdisturb() && (!uapi_sleep_mode_flag_get()))\r
     {\r
@@ -985,7 +993,7 @@ static void ACLConnectionFail(const bd_addr_t &bdAddr)
         return;\r
     }\r
     // 失败提示页\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "conn fail");\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "蓝牙耳机连接失败");\r
     HandleBeforeChangeView();\r
     if (BluetoothModel::GetInstance()->GetBluetoothCalleridStatus() == CALLERPLAYERS) {\r
         JumpView *jumpView = JumpView::GetInstance();\r
@@ -1008,7 +1016,7 @@ static void ACLConnectionFail(const bd_addr_t &bdAddr)
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ACLConnectionFail tipsConnFailMessageView GetInstance fail");\r
         return;\r
     }\r
-    tipsConnFailMessageView->RefreshNameLabel(bdAddr);\r
+    tipsConnFailMessageView->RefreshNameLabel(bdAddr);//更新连接失败的提示视图的蓝牙名称\r
     /* -------------------------------------------------------------------------- */\r
     if (true != OHOS::ConfigModel::GetInstance()->GetDnotdisturb() && (!uapi_sleep_mode_flag_get()))\r
     {\r
@@ -1018,7 +1026,7 @@ static void ACLConnectionFail(const bd_addr_t &bdAddr)
     /* -------------------------------------------------------------------------- */\r
 }\r
 \r
-//处理断开蓝牙耳机连接\r
+//处理断开蓝牙耳机连接的UI操作\r
 static void DisconnectedHandle()\r
 {\r
     BluetoothModel::GetInstance()->SetTagDisconnectView(false);\r
@@ -1032,22 +1040,18 @@ static void DisconnectedHandle()
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisconnectedHandle deviceList nullptr");\r
         return;\r
     }\r
-    deviceList->RefreshList();\r
-    // BluetoothOptionsView *bluetoothOptionsView = BluetoothOptionsView::GetInstance();\r
-    // if (bluetoothOptionsView == nullptr) {\r
-    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AclStateChangedCallback bluetoothOptionsView  == nullptr");\r
-    //     return;\r
-    // }\r
-    // bluetoothOptionsView->RefreshText();\r
+    deviceList->RefreshList();//刷新列表\r
 }\r
 \r
 void BluetoothModel::BtGapAclStateChangedHandle(gap_acl_state_t state, unsigned int reason, const bd_addr_t &bdAddr)\r
 {\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"ACL回调,%d",state);\r
     bool tag = BluetoothModel::GetInstance()->IsTagScanDeviceClicked();\r
     if ((reason == 0x13) || (reason == 0x14) || (reason == 0x15) || (reason == 0x3D) || (reason == 0x08 && (!tag))) { // 连接断开\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "The peer end is disconnected.");\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "蓝牙设备主动断开与手表连接 reason is %x", reason);\r
         DisconnectedHandle();\r
     } else if (reason == 0x16) { // 主动断开连接\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "手表主动断开与蓝牙设备连接,reason is%x", reason);\r
         DisconnectedHandle();\r
         BluetoothCaseInfo *onClickBtCaseInfo = BluetoothModel::GetInstance()->GetTempMacValue();\r
         if (BluetoothModel::GetInstance()->IsTagConnectNew()) {\r
@@ -1077,16 +1081,19 @@ void BluetoothModel::BtGapAclStateChangedHandle(gap_acl_state_t state, unsigned
             int32_t retA2dp = a2dp_src_connect(&bdAddr);\r
             if (retA2dp) {\r
                 ACLConnectionFail(bdAddr);\r
-            }\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "a2dp_src_connect result 0x%x", retA2dp);\r
-            #ifdef SUPPORT_CAT1_HFP_AG_SERV\r
+                #ifdef SUPPORT_CAT1_HFP_AG_SERV\r
                 errcode_t rethfp= hfp_ag_cmd_conn_hfp(&bdAddr);\r
-                if(rethfp)\r
+                if(!rethfp)\r
                 {\r
-                    ACLConnectionFail(bdAddr);\r
+                    errcode_t retVal = ConnectRemoteDevice((const bd_addr_t *)&onClickBtCaseInfo->addr);\r
                 }\r
-            #endif\r
-\r
+                #endif\r
+            }\r
+            else\r
+            {\r
+                errcode_t retVal = ConnectRemoteDevice((const bd_addr_t *)&onClickBtCaseInfo->addr);\r
+            }\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "a2dp_src_connect result 0x%x", retA2dp);\r
 \r
         } else {\r
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ingore a2dp_src_connect");\r
@@ -1206,6 +1213,8 @@ static void A2dpSrcConnectstateChanged(bd_addr_t *bdAddr, int connState)
         SendMsgToUIService(EARPHONE_CONNECTED_TO_UI, 0, nullptr, 0);\r
          uapi_dev_runtime_set_earphone_connect_stat(1);\r
          uapi_save_runtime_log(RUNTIME_LOG_BR_CONNECT_A2DP_HEADSET);\r
+        if(headset_Is_connect() == false)\r
+            do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_CONNECT_AG, nullptr, 0);\r
          \r
     }\r
 \r