# wx.onBluetoothDeviceFound(function listener)

> 基础库 1.1.0 开始支持，低版本需做[兼容处理](1003706)。

> __小程序插件__：支持，需要小程序基础库版本不低于 [2.9.1](1003706)
> 
> __微信 鸿蒙 OS 版__：支持

> 相关文档: [蓝牙介绍](/miniprogram/dev/framework/device/bluetooth.md)

## 功能描述

监听搜索到新设备的事件

## 参数

### function listener

搜索到新设备的事件的监听函数

#### 参数

##### object res


```json
[
  {
    "属性": "devices",
    "类型": "Array.<Object>",
    "说明": "新搜索到的设备列表",
    "子项": [
      {
        "结构属性": "name",
        "类型": "string",
        "说明": "蓝牙设备名称，某些设备可能没有"
      },
      {
        "结构属性": "deviceId",
        "类型": "string",
        "说明": "蓝牙设备 id"
      },
      {
        "结构属性": "RSSI",
        "类型": "number",
        "说明": "当前蓝牙设备的信号强度，单位 dBm"
      },
      {
        "结构属性": "advertisData",
        "类型": "ArrayBuffer",
        "说明": "当前蓝牙设备的广播数据段中的 ManufacturerData 数据段。"
      },
      {
        "结构属性": "advertisServiceUUIDs",
        "类型": "Array.<string>",
        "说明": "当前蓝牙设备的广播数据段中的 ServiceUUIDs 数据段"
      },
      {
        "结构属性": "localName",
        "类型": "string",
        "说明": "当前蓝牙设备的广播数据段中的 LocalName 数据段"
      },
      {
        "结构属性": "serviceData",
        "类型": "Object",
        "说明": "当前蓝牙设备的广播数据段中的 ServiceData 数据段"
      },
      {
        "结构属性": "connectable",
        "类型": "boolean",
        "说明": "当前蓝牙设备是否可连接（ Android 8.0 以下不支持返回该值 ）"
      }
    ]
  }
]
```

## 注意

- 若在 [wx.onBluetoothDeviceFound](/miniprogram/dev/api/device/bluetooth/wx.onBluetoothDeviceFound) 回调了某个设备，则此设备会添加到 [wx.getBluetoothDevices](/miniprogram/dev/api/device/bluetooth/wx.getBluetoothDevices) 接口获取到的数组中。
- 地址变化这个是鸿蒙系统特性，小程序可以不缓存地址，重新搜索连接。

## 示例代码

[在开发者工具中预览效果](https://developers.weixin.qq.com/s/pQU51zmz7a3K)

```js
// ArrayBuffer转16进度字符串示例
function ab2hex(buffer) {
  var hexArr = Array.prototype.map.call(
    new Uint8Array(buffer),
    function(bit) {
      return ('00' + bit.toString(16)).slice(-2)
    }
  )
  return hexArr.join('');
}
wx.onBluetoothDeviceFound(function(res) {
  var devices = res.devices;
  console.log('new device list has founded')
  console.dir(devices)
  console.log(ab2hex(devices[0].advertisData))
})
```

## 注意

- 蓝牙设备在被搜索到时，系统返回的 `name` 字段一般为广播包中的 `LocalName` 字段中的设备名称，而如果与蓝牙设备建立连接，系统返回的 `name` 字段会改为从蓝牙设备上获取到的 `GattName`。若需要动态改变设备名称并展示，建议使用 `localName` 字段。
- 安卓下部分机型需要有位置权限才能搜索到设备，需留意是否开启了位置权限
