HID蓝牙配对后如何实现自动连接
================

#### 问题现象

在与HID设备完成配对后，如何实现自动连接？如果在系统蓝牙界面手动点击连接之后，后续断开是否会稳定回连？

#### 背景知识

*   从API16版本开始，@ohos.bluetooth.connection模块提供了[connectAllowedProfiles](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-bluetooth-connection#connectionconnectallowedprofiles16-1)接口，支持对HFP、HID、A2DP设备主动发起连接。
*   从API12版本开始，@ohos.bluetooth.connection模块提供了[getRemoteProfileUuids](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-bluetooth-connection#connectiongetremoteprofileuuids12)接口，可用于查询对端蓝牙设备的profile协议能力，建议仅对已配对的设备调用该方法。

#### 解决方案

*   当与HID设备完成配对，调用connectAllowedProfiles接口成功建立连接后，后续每次重新打开蓝牙开关，系统都可以自动与HID设备建立连接。
    
    import { connection } from '@kit.ConnectivityKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    
    @Entry
    @Component
    struct connectAllowedProfiles {
      connectAllowedProfiles() {
        _// 发起蓝牙配对请求，此处的mac需要提前获取_
        connection.pairDevice('xx.xx.xx.xx', (err: BusinessError) \=\> {
          console.info(\`pairDevice, device name err:${err}\`);
        });
    
       _ // 订阅蓝牙配对状态变化事件_
        connection.on('bondStateChange', (data: connection.BondStateParam) \=\> {
       _   // 蓝牙已配对_
          if (data.state \=== connection.BondState.BOND\_STATE\_BONDED) {
          _  // 调用getRemoteProfileUuids接口获取对端蓝牙支持的Profile类型_
            connection.getRemoteProfileUuids(data.deviceId,
              (err: BusinessError, dataArray: Array<connection.ProfileUuids\>) \=\> {
                console.error(\`getRemoteProfileUuids errCode: ${(err as BusinessError).code}, errMessage: ${(err as BusinessError).message}, dataArray: ${dataArray}\`);
               _ // 当dataArray中支持类型包含A2DP、HFP和HID其中的一种，可调用connectAllowedProfiles接口发起连接_
                connection.connectAllowedProfiles(data.deviceId, (err: BusinessError) \=\> {
                  if (err) {
                    console.error(\`connectAllowedProfiles errCode: ${(err as BusinessError).code}, errMessage: ${(err as BusinessError).message}\`);
                    return;
                  }
                  console.info('connectAllowedProfiles');
                });
              });
          }
        });
      }
    
      build() {
        Column() {
          Button('connect Allowed Profiles')
            .onClick(() \=\> {
             _ // 创建蓝牙配对状态变化监听，发起蓝牙配对，连接蓝牙_
              this.connectAllowedProfiles();
            });
        };
      }
    }
    
*   如果在系统蓝牙界面使用手动点击的方式与HID设备建立连接，需要在已配对的设备配置信息中打开‘输入设备’开关，才能实现稳定回连。

#### 常见FAQ

Q：在HarmonyOS中，connection.connectAllowedProfiles接口用于连接支持特定配置文件的蓝牙设备。请问该接口支持哪些profile类型？

A：connection.connectAllowedProfiles接口支持的profile类型理论上只包括A2DP、HFP和HID这三种，但是有个特殊的profile类型HOGP。HOGP实际上为HID Over GATT Protocol的缩写，HID以前是只有BR设备有的，后来HID profile为了适配BLE设备才有了HOGP profile这个类型，属于HID profile的一种。