Skip to content

蓝牙与 P2P 一体化配对

示例说明

演示如何在同一个页面中串联经典蓝牙连接和 Wi-Fi P2P 配对,完成手机与眼镜的主链路建立。

使用位置

来源入口包括:

  • ClassicBtActivity 选择设备后进入
  • MainPhoneActivity 首页点击连接按钮进入

示例页面:

  • com.rokid.phone.ui.BtWifiConnectActivity

适用端

  • 手机端

关键文件

流程说明

确认连接目标根据页面入参判断本次需要连接蓝牙、P2P,还是两者都连接。
连接经典蓝牙获取目标蓝牙设备后调用 connectToServer()
保存设备信息蓝牙连接成功后保存设备信息,供后续自动重连使用。
请求 P2P 连接通过蓝牙通道发送 sendConnectP2pRequest()
匹配 P2P 设备在扫描结果中找到同名 Glass3 设备并调用 connectDevice()
  1. 页面根据入参判断本次要连蓝牙、P2P,还是两者都连。
  2. 如果需要蓝牙:
    • BluetoothAdapter.getRemoteDevice() 获取目标设备。
    • 调用 connectToServer() 发起经典蓝牙连接。
  3. 蓝牙连接成功后:
    • 保存当前设备信息。
    • 如果还需要 P2P,则继续发起 sendConnectP2pRequest()
  4. 监听 IWifiP2PClientListener
    • 查找与当前蓝牙设备同名的 Glass 设备。
    • 找到后调用 connectDevice() 完成连接。
  5. 成功后更新全局连接状态。

相关 API

链路说明

Demo 中很多控制指令和状态同步走经典蓝牙通道,大文件和高带宽能力依赖 P2P。

因此蓝牙是控制面,P2P 更偏数据面,先建立蓝牙链路可以让后续状态管理更稳定。

当前实现主要依赖设备名匹配:

  • DeviceLinkerManager.mConnectingBluetoothDevice?.name
  • WifiP2pDevice.deviceName

如果业务中存在多台同名设备,建议结合设备唯一标识增强匹配逻辑。

注意事项

  • 页面有超时逻辑,超过设定时间仍未成功会进入失败态。
  • 如果手机 Wi-Fi 未开启,会直接提示失败并退出。
  • 当前流程对“设备同名但非同一台设备”的场景不够鲁棒。