• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 蓝牙设置
2
3<!--Kit: Connectivity Kit-->
4<!--Subsystem: Communication-->
5<!--Owner: @enjoy_sunshine-->
6<!--Designer: @chengguohong; @tangjia15-->
7<!--Tester: @wangfeng517-->
8<!--Adviser: @zhang_yixin13-->
9
10## 简介
11本指南主要提供了开启蓝牙、关闭蓝牙和获取蓝牙开关状态的开发指导。开发者在使用蓝牙其他功能时,应确保蓝牙子系统已正常开启。
12
13## 开发步骤
14
15### 申请蓝牙权限
16需要申请权限ohos.permission.ACCESS_BLUETOOTH。如何配置和申请权限,具体操作请参考[声明权限](../../security/AccessToken/declare-permissions.md)和[向用户申请授权](../../security/AccessToken/request-user-authorization.md)。
17
18### 导入所需API模块
19导入access和错误码模块。
20```ts
21import { access } from '@kit.ConnectivityKit';
22import { BusinessError } from '@kit.BasicServicesKit';
23```
24
25### 订阅蓝牙开关状态变化事件
26通过订阅开关状态变化事件,可以获取实时的蓝牙开关状态。蓝牙开启或者关闭过程中,涉及多种蓝牙状态的跃迁。其中[STATE_OFF](../../reference/apis-connectivity-kit/js-apis-bluetooth-access.md#bluetoothstate)表示蓝牙已关闭,此状态下,应用不可以使用蓝牙其他功能;[STATE_ON](../../reference/apis-connectivity-kit/js-apis-bluetooth-access.md#bluetoothstate)表示蓝牙已打开,此状态下,应用可以使用蓝牙其他功能。
27```ts
28// 定义蓝牙开关状态变化函数回调
29function onReceiveEvent(data: access.BluetoothState) {
30  let btStateMessage = '';
31  switch (data) {
32    case access.BluetoothState.STATE_OFF:
33      // 表示蓝牙是关闭的
34      btStateMessage += 'STATE_OFF';
35      break;
36    case access.BluetoothState.STATE_TURNING_ON:
37      btStateMessage += 'STATE_TURNING_ON';
38      break;
39    case access.BluetoothState.STATE_ON:
40      // 表示蓝牙是开启的,此时应用才可以使用蓝牙其他功能
41      btStateMessage += 'STATE_ON';
42      break;
43    case access.BluetoothState.STATE_TURNING_OFF:
44      btStateMessage += 'STATE_TURNING_OFF';
45      break;
46    case access.BluetoothState.STATE_BLE_TURNING_ON:
47      btStateMessage += 'STATE_BLE_TURNING_ON';
48      break;
49    case access.BluetoothState.STATE_BLE_ON:
50      btStateMessage += 'STATE_BLE_ON';
51      break;
52    case access.BluetoothState.STATE_BLE_TURNING_OFF:
53      btStateMessage += 'STATE_BLE_TURNING_OFF';
54      break;
55    default:
56      btStateMessage += 'unknown state';
57      break;
58  }
59  console.info('bluetooth state: ' + btStateMessage);
60}
61
62try {
63    // 发起订阅
64    access.on('stateChange', onReceiveEvent);
65} catch (err) {
66    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
67}
68```
69
70### 开启蓝牙
71若应用获取到的蓝牙开关状态是关闭的,当需要使用蓝牙时,则需要主动开启蓝牙。通过订阅蓝牙开关状态,判断蓝牙是否开启成功。
72
73系统弹出对话框并提示应用“想要开启蓝牙”,如下图1。若用户同意授权,将开启蓝牙。
74
75![enable bluetooth dialog](figures/enable-bluetooth-dialog.png)
76
77**图1** 开启蓝牙对话框
78```ts
79try {
80    // 主动获取蓝牙当前的开关状态
81    let state = access.getState();
82    if (state == access.BluetoothState.STATE_OFF) {
83        // 若蓝牙是关闭的,则主动开启蓝牙
84        access.enableBluetooth();
85    }
86} catch (err) {
87    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
88}
89```
90
91### 关闭蓝牙
92若应用不需要使用蓝牙时,可根据实际情况判断是否需要主动关闭蓝牙。通过订阅蓝牙开关状态,判断蓝牙是否关闭成功。
93
94系统弹出对话框并提示应用“想要关闭蓝牙”,如下图2。若用户同意授权,将关闭蓝牙。
95
96![disable bluetooth dialog](figures/disable-bluetooth-dialog.png)
97
98**图2** 关闭蓝牙对话框
99```ts
100try {
101   // 主动获取蓝牙当前的开关状态
102   let state = access.getState();
103   if (state == access.BluetoothState.STATE_ON) {
104     // 若蓝牙是开启的,则主动关闭蓝牙
105     access.disableBluetooth();
106  }
107} catch (err) {
108    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
109}
110```
111
112## 完整示例
113```ts
114import { access } from '@kit.ConnectivityKit';
115import { BusinessError } from '@kit.BasicServicesKit';
116
117export class AdapterManager {
118  // 定义蓝牙开关状态变化函数回调
119  onReceiveEvent = (data: access.BluetoothState) => {
120    let btStateMessage = '';
121    switch (data) {
122      case access.BluetoothState.STATE_OFF:
123        // 表示蓝牙是关闭的
124        btStateMessage += 'STATE_OFF';
125        break;
126      case access.BluetoothState.STATE_TURNING_ON:
127        btStateMessage += 'STATE_TURNING_ON';
128        break;
129      case access.BluetoothState.STATE_ON:
130        // 表示蓝牙是开启的,此时应用才可以使用蓝牙其他功能
131        btStateMessage += 'STATE_ON';
132        break;
133      case access.BluetoothState.STATE_TURNING_OFF:
134        btStateMessage += 'STATE_TURNING_OFF';
135        break;
136      case access.BluetoothState.STATE_BLE_TURNING_ON:
137        btStateMessage += 'STATE_BLE_TURNING_ON';
138        break;
139      case access.BluetoothState.STATE_BLE_ON:
140        btStateMessage += 'STATE_BLE_ON';
141        break;
142      case access.BluetoothState.STATE_BLE_TURNING_OFF:
143        btStateMessage += 'STATE_BLE_TURNING_OFF';
144        break;
145      default:
146        btStateMessage += 'unknown state';
147        break;
148    }
149    console.info('bluetooth state: ' + btStateMessage);
150  };
151
152  // 开启蓝牙
153  public openBluetooth() {
154    try {
155      access.on('stateChange', this.onReceiveEvent);
156    } catch (err) {
157      console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
158    }
159    try {
160      // 主动获取蓝牙当前的开关状态
161      let state = access.getState();
162      if (state == access.BluetoothState.STATE_OFF) {
163        // 若蓝牙是关闭的,则主动开启蓝牙
164        access.enableBluetooth();
165      }
166    } catch (err) {
167      console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
168    }
169  }
170
171  // 关闭蓝牙
172  public closeBluetooth() {
173    try {
174      // 主动获取蓝牙当前的开关状态
175      let state = access.getState();
176      if (state == access.BluetoothState.STATE_ON) {
177        // 若蓝牙是开启的,则主动关闭蓝牙
178        access.disableBluetooth();
179      }
180    } catch (err) {
181      console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
182    }
183  }
184}
185
186let adapterManager = new AdapterManager();
187export default adapterManager as AdapterManager;
188```