# 蓝牙与 P2P 一体化配对

## 示例说明

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

## 使用位置

来源入口包括：

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

示例页面：

- `com.rokid.phone.ui.BtWifiConnectActivity`

## 适用端

- 手机端

## 关键文件

- [glass3sdkphonedemo/app/src/main/java/com/rokid/phone/ui/BtWifiConnectActivity.kt](https://gitee.com/as_pixar/glass3sdkdemo/blob/main/glass3sdkphonedemo/app/src/main/java/com/rokid/phone/ui/BtWifiConnectActivity.kt)
- [glass3sdkphonedemo/app/src/main/java/com/rokid/phone/DeviceLinkerManager.kt](https://gitee.com/as_pixar/glass3sdkdemo/blob/main/glass3sdkphonedemo/app/src/main/java/com/rokid/phone/DeviceLinkerManager.kt)

## 流程说明

<div class="sample-flow">
  <div class="sample-flow-step" data-step="1">
    <strong>确认连接目标</strong>
    <span>根据页面入参判断本次需要连接蓝牙、P2P，还是两者都连接。</span>
  </div>
  <div class="sample-flow-step" data-step="2">
    <strong>连接经典蓝牙</strong>
    <span>获取目标蓝牙设备后调用 <code>connectToServer()</code>。</span>
  </div>
  <div class="sample-flow-step" data-step="3">
    <strong>保存设备信息</strong>
    <span>蓝牙连接成功后保存设备信息，供后续自动重连使用。</span>
  </div>
  <div class="sample-flow-step" data-step="4">
    <strong>请求 P2P 连接</strong>
    <span>通过蓝牙通道发送 <code>sendConnectP2pRequest()</code>。</span>
  </div>
  <div class="sample-flow-step" data-step="5">
    <strong>匹配 P2P 设备</strong>
    <span>在扫描结果中找到同名 Glass3 设备并调用 <code>connectDevice()</code>。</span>
  </div>
</div>

1. 页面根据入参判断本次要连蓝牙、P2P，还是两者都连。
2. 如果需要蓝牙：
   - 用 `BluetoothAdapter.getRemoteDevice()` 获取目标设备。
   - 调用 `connectToServer()` 发起经典蓝牙连接。
3. 蓝牙连接成功后：
   - 保存当前设备信息。
   - 如果还需要 P2P，则继续发起 `sendConnectP2pRequest()`。
4. 监听 `IWifiP2PClientListener`：
   - 查找与当前蓝牙设备同名的 Glass 设备。
   - 找到后调用 `connectDevice()` 完成连接。
5. 成功后更新全局连接状态。

## 相关 API

- [手机端 API：蓝牙与指环](/terminal-sdk/api-reference/Glass3%20%20SDK(%E6%89%8B%E6%9C%BA%E7%AB%AF)%20API%E6%96%87%E6%A1%A3.md#phone-bluetooth)
- [手机端 API：Wi-Fi P2P 与 AR Mix](/terminal-sdk/api-reference/Glass3%20%20SDK(%E6%89%8B%E6%9C%BA%E7%AB%AF)%20API%E6%96%87%E6%A1%A3.md#phone-p2p)

## 链路说明

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

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

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

- `DeviceLinkerManager.mConnectingBluetoothDevice?.name`
- `WifiP2pDevice.deviceName`

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

## 注意事项

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