本指南主要提供了查找设备相关的开发指导,包括如何扫描周边设备、设置本机蓝牙扫描模式以及查找已配对设备信息。
导入connection和错误码模块。
- import { connection } from '@kit.ConnectivityKit';
- import { BusinessError } from '@kit.BasicServicesKit';
用于扫描周边支持蓝牙能力的设备,并获取到蓝牙设备的部分信息。此过程也可被称为“搜索”、“发现”或“查找”。只有周边蓝牙设备处于可被发现的状态时,才能被本机蓝牙设备扫描到。
1. 订阅扫描设备结果上报事件
- // 定义扫描结果上报回调函数
- function onReceiveEvent(data: Array<connection.DiscoveryResult>) {
- console.info('bluetooth device: '+ JSON.stringify(data));
- }
-
- try {
- // 发起订阅
- connection.on('discoveryResult', onReceiveEvent);
- } catch (err) {
- console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
- }
- // 定义扫描结果上报回调函数
- function onReceiveEvent(data: Array<string>) {
- console.info('bluetooth device: '+ JSON.stringify(data));
- }
-
- try {
- // 发起订阅
- connection.on('bluetoothDeviceFind', onReceiveEvent);
- } catch (err) {
- console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
- }
2. 发起设备扫描
应用发起扫描后,整个扫描过程大约持续12s。应用可以对扫描到的蓝牙设备发起配对、连接和传输数据流程。具体操作请参考配对与连接设备、连接和传输数据。
- try {
- // 判断本机设备是否正在进行扫描
- let scan = connection.isBluetoothDiscovering();
- if (!scan) {
- // 若当前不处于扫描过程,则开始扫描设备
- connection.startBluetoothDiscovery();
- }
- } catch (err) {
- console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
- }
3. 停止设备扫描
扫描是一个很消耗蓝牙硬件资源的过程。当扫描到应用所需的蓝牙设备后,在发起连接前,必须停止设备扫描。
- // 定义扫描结果上报回调函数
- function onReceiveEvent(data: Array<string>) {
- console.info('bluetooth device: '+ JSON.stringify(data));
- }
-
- try {
- // 判断本机设备是否正在进行扫描
- let scan = connection.isBluetoothDiscovering();
- if (scan) {
- // 若当前处于扫描过程,则停止扫描设备
- connection.stopBluetoothDiscovery();
- }
- // 若不再需要使用扫描,可以取消订阅扫描上报结果
- connection.off('bluetoothDeviceFind', onReceiveEvent);
- } catch (err) {
- console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
- }
本机蓝牙扫描模式用于控制本机设备是否可以被周边其他蓝牙设备扫描到或连接上。非系统应用一般不用关注这个模式,系统设置应用会决定如何设置。
- try {
- // 获取当前本机的扫描模式
- let scanMode: connection.ScanMode = connection.getBluetoothScanMode();
- console.info('scanMode: ' + scanMode);
- if (scanMode != connection.ScanMode.SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE) {
- // 将本机设备的扫描模式设置为可被发现和可被连接
- connection.setBluetoothScanMode(connection.ScanMode.SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE, 0);
- }
- } catch (err) {
- console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
- }
在发起扫描设备前,可以查找该设备是否是已配对的设备,以减少扫描设备的流程。也可以对已配对设备发起连接和传输数据流程,具体操作请参考配对与连接设备和传输数据。
- try {
- // 获取已配对设备信息
- let devices = connection.getPairedDevices();
- console.info('pairedDevices: ' + JSON.stringify(devices));
- // 若已知设备地址,可主动查询该设备是否是已配对的
- if (devices.length > 0) {
- let pairState = connection.getPairState(devices[0]);
- console.info('device: '+ devices[0] + ' pairState is ' + pairState);
- }
- } catch (err) {
- console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
- }
- import { connection } from '@kit.ConnectivityKit';
- import { BusinessError } from '@kit.BasicServicesKit';
-
- export class DiscoveryDeviceManager {
- // 定义扫描结果上报回调函数
- onReceiveEvent = (data: Array<string>) => {
- console.info('bluetooth device: '+ JSON.stringify(data));
- };
-
- public startDiscovery() {
- try {
- connection.on('bluetoothDeviceFind', this.onReceiveEvent);
- } catch (err) {
- console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
- }
- try {
- // 判断本机设备是否正在进行扫描
- let scan = connection.isBluetoothDiscovering();
- if (!scan) {
- // 若当前不处于扫描过程,则开始扫描设备
- connection.startBluetoothDiscovery();
- }
- } catch (err) {
- console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
- }
- }
-
- public stopDiscovery() {
- try {
- // 判断本机设备是否正在进行扫描
- let scan = connection.isBluetoothDiscovering();
- if (scan) {
- // 若当前处于扫描过程,则停止扫描设备
- connection.stopBluetoothDiscovery();
- }
- // 若不再需要使用扫描,可以取消订阅扫描上报结果
- connection.off('bluetoothDeviceFind', this.onReceiveEvent);
- } catch (err) {
- console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
- }
- }
-
- public setScanMode() {
- try {
- // 获取当前本机的扫描模式
- let scanMode: connection.ScanMode = connection.getBluetoothScanMode();
- console.info('scanMode: ' + scanMode);
- if (scanMode != connection.ScanMode.SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE) {
- // 将本机设备的扫描模式设为可被发现和可被连接
- connection.setBluetoothScanMode(connection.ScanMode.SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE, 0);
- }
- } catch (err) {
- console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
- }
- }
-
- public getPairedDevices() {
- try {
- // 获取已配对设备信息
- let devices = connection.getPairedDevices();
- console.info('pairedDevices: ' + JSON.stringify(devices));
- // 若已知设备地址,可主动查询该设备是否是已配对的
- if (devices.length > 0) {
- let pairState = connection.getPairState(devices[0]);
- console.info('device: '+ devices[0] + ' pairState is ' + pairState);
- }
- } catch (err) {
- console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
- }
- }
- }
-
- let discoveryDeviceManager = new DiscoveryDeviceManager();
- export default discoveryDeviceManager as DiscoveryDeviceManager;
合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
解决方案
精准高效的一站式服务支持,助力开发者商业成功