Bluetooth — это технология беспроводной связи ближнего действия, которая обеспечивает обмен данными между стационарными и мобильными устройствами. Как правило, Bluetooth BR/EDR до версии Bluetooth 3.0 называется традиционным Bluetooth, а Bluetooth BLE в соответствии со спецификацией Bluetooth 4.0 называется Bluetooth с низким энергопотреблением. Модуль BLE предоставляет методы для работы и управления Bluetooth.
Разрешение ACCESS_BLUETOOTH требуется для многих интерфейсов Bluetooth, таких как: ble.getConnectedBLEDevices (подключить устройство BLE к текущему устройству), ble.startBLEScan (инициировать процесс сканирования BLE). Это разрешение требует авторизации пользователя, которую можно получить, вызвав метод requestPermissionsFromUser().
Частые всплывающие окна не должны беспокоить пользователей. Если пользователь откажется от авторизации, он не сможет снова открыть всплывающее окно. Приложению необходимо помочь пользователю вручную предоставить разрешения в интерфейсе «Настройки» системного приложения.
requestPermissionsFromUser() {
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
try {
let context = getContext(this);
atManager.requestPermissionsFromUser(context, ['ohos.permission.ACCESS_BLUETOOTH'], (err: BusinessError, data: PermissionRequestResult) => {
console.info('data:' + JSON.stringify(data));
console.info('data permissions:' + data.permissions);
console.info('data authResults:' + data.authResults);
});
} catch (err) {
console.log(`catch err->${JSON.stringify(err)}`);
}
}
Подайте заявку на получение соответствующих разрешений в файле Module.json.
"requestPermissions":[
{
"name" : "ohos.permission.ACCESS_BLUETOOTH",
"reason": "$string:module_desc",
"usedScene": {
"abilities": [
"FormAbility"
],
"when":"always"
}
},
{
"name" : "ohos.permission.DISCOVER_BLUETOOTH",
"usedScene": {
"abilities": [
"FormAbility"
],
"when":"always"
}
},
{
"name" : "ohos.permission.USE_BLUETOOTH",
"usedScene": {
"abilities": [
"bluetouth"
],
"when":"always"
}
},
]
BLE — это Bluetooth Low Energy, который может сканировать только устройства Bluetooth с низким энергопотреблением.
Соединение классическое Bluetooth. Если вы хотите просканировать все устройства в настройках системы, вы можете вызвать этот интерфейс.
ble сканирует Bluetooth с низким энергопотреблением, и результаты меньше, чем при сканировании соединения. Если вы хотите сканировать все устройства в настройках системы, вам нужно вызвать Connection.startbluetoothdiscovery в модуле @ohos.bluetooth.connection.
Сканирование Bluetooth с низким энергопотреблением: ble.startBLEScan
import { BusinessError } from '@kit.BasicServicesKit';
import { ble } from '@kit.ConnectivityKit';
@Entry
@Component
struct Index {
@State onReceiveEventData: string = ''
@State isScan: boolean = false
// ...
build() {
Row() {
Column() {
// Bluetooth-сканирование
Button("startBLEScan")
.onClick(() => {
this.isScan = !this.isScan
let onReceiveEvent = (data: Array<ble.ScanResult>) => {
console.info('BLE scan device find result = ' + JSON.stringify(data));
let dataString = JSON.stringify(data)
this.onReceiveEventData = dataString
}
try {
ble.on("BLEDeviceFind", onReceiveEvent);
let scanFilter: ble.ScanFilter = {
// deviceId:"xxxx",
// name:"test",
// serviceUuid:"xxxx"
};
console.info('scanFilter' + JSON.stringify(scanFilter))
let scanOptions: ble.ScanOptions = {
interval: 50,
dutyMode: ble.ScanDuty.SCAN_MODE_LOW_POWER,
matchMode: ble.MatchMode.MATCH_MODE_AGGRESSIVE,
}
ble.startBLEScan(null, scanOptions);
} catch (err) {
console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' +
(err as BusinessError).message);
}
})
.type(ButtonType.Capsule)
.margin({ top: 4 })
.backgroundColor('#ff1198ee')
.width('67%')
.height('4%')
// ...
Text(this.isScan ? this.onReceiveEventData : «Сканирование Bluetooth не включено»)
.textAlign(TextAlign.Center)
.fontSize(12)
.border({ width: 1 })
.padding(10)
.margin(10)
.width('80%')
.height(200)
}
.width('100%')
}
.height('100%')
}
}
Классическое сканирование Bluetooth: Connection.startBluetoothDiscovery.
import { BusinessError } from '@kit.BasicServicesKit';
import connection from '@ohos.bluetooth.connection';
@Entry
@Component
struct Index {
@State onReceiveEventData: string = ''
@State isScan: boolean = false
// ...
build() {
Row() {
Column() {
// Bluetooth-сканирование
Button("startBluetoothDiscovery")
.onClick(() => {
this.isScan = !this.isScan
let onReceiveEvent = (data: Array<string>) => {
console.log('data length' + JSON.stringify(data));
let dataString = JSON.stringify(data)
this.onReceiveEventData = dataString
}
try {
connection.on('bluetoothDeviceFind', onReceiveEvent);
connection.startBluetoothDiscovery();
} catch (err) {
console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' +
(err as BusinessError).message);
}
})
.type(ButtonType.Capsule)
.margin({ top: 4 })
.backgroundColor('#ff1198ee')
.width('67%')
.height('4%')
Text(this.isScan ? this.onReceiveEventData : «Сканирование Bluetooth не включено»)
.textAlign(TextAlign.Center)
.fontSize(12)
.border({ width: 1 })
.padding(10)
.margin(10)
.width('80%')
.height(200)
}
.width('100%')
}
.height('100%')
}
}
Сопутствующие возможности интерфейса:
Сопутствующие справочные документы по интерфейсу: @ohos.bluetooth.access (модуль доступа Bluetooth, @ohos.bluetooth.connection (модуль подключения Bluetooth), @ohos.bluetooth.socket (модуль разъема Bluetooth).
GridItem(){
Button('Разрешение на открытие').onClick(() => {
hilog.info(0x00000, TAG, «Открытые разрешения»);
this.requestPermissionsFromUser();
})
}
.columnStart(0)
.columnEnd(1)
.rowStart(0)
.rowEnd(0)
GridItem() {
Кнопка('Bluetooth включен').onClick(() => {
hilog.info(0x00000, TAG, «Bluetooth включен»);
try {
access.enableBluetooth();
} catch (err) {
hilog.info(0x00000, TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
})
}
GridItem() {
Кнопка('Bluetooth-Закрыть').onClick(() => {
hilog.info(0x00000, TAG, «Bluetooth выключен»);
try {
access.disableBluetooth();
} catch (err) {
hilog.info(0x00000, TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
})
}
GridItem() {
Button('получатьBluetoothсписок сопряжений&состояние').onClick(() => {
hilog.info(0x00000, TAG, «Получить список сопряжений Bluetooth»);
try {
let result: Array<string> = connection.getPairedDevices();
let index = 1;
result.forEach(s => {
let state = connection.getPairState(s)
hilog.info(0x00000, TAG, 'Устройство %{public}s,id-> %{public}s,состояние为->%{public}s', index++, s, bluetoothBondStateMap.get(state));
})
} catch (err) {
hilog.info(0x00000, TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
})
}
.columnStart(0)
.columnEnd(1)
.rowStart(1)
.rowEnd(1)
GridItem() {
Button('Подписаться на события отчетов об обнаружении устройств Bluetooth').onClick(() => {
hilog.info(0x00000, TAG, «Подписаться на события отчетов об обнаружении устройств Bluetooth. ');
try {
connection.on('bluetoothDeviceFind', onReceiveEvent);
} catch (err) {
hilog.info(0x00000, TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
})
}
.columnStart(0)
.columnEnd(1)
.rowStart(2)
.rowEnd(2)
GridItem() {
Button('Отписаться от событий отчетов об обнаружении устройств').onClick(() => {
hilog.info(0x00000, TAG, «Отписаться от событий отчетов об обнаружении устройств»);
try {
hilog.info(0x00000, TAG, «Общее количество обнаруженных устройств равно -1#» + deviceSet.size);
connection.off('bluetoothDeviceFind', onReceiveEvent);
index = 1;
} catch (err) {
hilog.info(0x00000, TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
})
}
.columnStart(0)
.columnEnd(1)
.rowStart(3)
.rowEnd(3)
GridItem() {
Button('Bluetooth-Начать сканирование').onClick(() => {
hilog.info(0x00000, TAG, «Bluetooth-Включить сканирование»);
try {
connection.startBluetoothDiscovery()
} catch (err) {
hilog.info(0x00000, TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
})
}
Если вы считаете, что этот контент вам очень полезен, я хотел бы предложить вам оказать мне три небольшие услуги: