场景描述
蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,而将蓝牙4.0规范下的BLE蓝牙称为低功耗蓝牙。BLE模块提供了对蓝牙操作和管理的方法。
场景一:申请蓝牙权限
方案:
ACCESS_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蓝牙扫描和系统设置蓝牙扫描
BLE为低功耗蓝牙,只能扫描到低功耗的蓝牙设备。
connection是经典蓝牙,如果想扫描到系统设置中的所有设备,可以调用此接口。
方案:
ble扫描的是低功耗蓝牙,相比于connection扫描结果偏少,如果想要扫描到系统设置中的所有设备,需要去调用@ohos.bluetooth.connection模块中的connection.startbluetoothdiscovery。
核心代码
低功耗蓝牙扫描: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() {
// 蓝牙扫描
Button("startBLEScan")
.onClick(() => {