【鸿蒙实战开发】基于短距离通信的BLE蓝牙扫描

场景描述

蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换。一般将蓝牙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(() => { 
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值