蓝牙与 P2P 一体化配对
示例说明
演示如何在同一个页面中串联经典蓝牙连接和 Wi-Fi P2P 配对,完成手机与眼镜的主链路建立。
使用位置
来源入口包括:
ClassicBtActivity选择设备后进入MainPhoneActivity首页点击连接按钮进入
示例页面:
com.rokid.phone.ui.BtWifiConnectActivity
适用端
- 手机端
关键文件
- glass3sdkphonedemo/app/src/main/java/com/rokid/phone/ui/BtWifiConnectActivity.kt
- glass3sdkphonedemo/app/src/main/java/com/rokid/phone/DeviceLinkerManager.kt
流程说明
确认连接目标根据页面入参判断本次需要连接蓝牙、P2P,还是两者都连接。
连接经典蓝牙获取目标蓝牙设备后调用
connectToServer()。保存设备信息蓝牙连接成功后保存设备信息,供后续自动重连使用。
请求 P2P 连接通过蓝牙通道发送
sendConnectP2pRequest()。匹配 P2P 设备在扫描结果中找到同名 Glass3 设备并调用
connectDevice()。- 页面根据入参判断本次要连蓝牙、P2P,还是两者都连。
- 如果需要蓝牙:
- 用
BluetoothAdapter.getRemoteDevice()获取目标设备。 - 调用
connectToServer()发起经典蓝牙连接。
- 用
- 蓝牙连接成功后:
- 保存当前设备信息。
- 如果还需要 P2P,则继续发起
sendConnectP2pRequest()。
- 监听
IWifiP2PClientListener:- 查找与当前蓝牙设备同名的 Glass 设备。
- 找到后调用
connectDevice()完成连接。
- 成功后更新全局连接状态。
相关 API
链路说明
Demo 中很多控制指令和状态同步走经典蓝牙通道,大文件和高带宽能力依赖 P2P。
因此蓝牙是控制面,P2P 更偏数据面,先建立蓝牙链路可以让后续状态管理更稳定。
当前实现主要依赖设备名匹配:
DeviceLinkerManager.mConnectingBluetoothDevice?.nameWifiP2pDevice.deviceName
如果业务中存在多台同名设备,建议结合设备唯一标识增强匹配逻辑。
注意事项
- 页面有超时逻辑,超过设定时间仍未成功会进入失败态。
- 如果手机 Wi-Fi 未开启,会直接提示失败并退出。
- 当前流程对“设备同名但非同一台设备”的场景不够鲁棒。