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 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 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```