首页 > 其他分享 >HarmonyOS开发之BLE蓝牙扫描

HarmonyOS开发之BLE蓝牙扫描

时间:2024-09-25 11:22:41浏览次数:11  
标签:err ble 蓝牙 HarmonyOS connection BLE data

随着物联网技术的发展,短距离通信技术如蓝牙成为了连接各种智能设备的关键。HarmonyOS NEXT作为面向未来的操作系统,不仅支持传统的蓝牙技术,还特别优化了低功耗蓝牙(BLE)的支持,使得开发者能够轻松实现设备间的高效数据交换。本文将通过具体案例介绍如何在HarmonyOS NEXT中实现BLE蓝牙扫描功能。

场景一:申请蓝牙权限

在开始任何蓝牙相关的操作之前,首先需要确保应用已经获得了必要的权限。对于BLE操作而言,ohos.permission.ACCESS_BLUETOOTH权限是必须的。为了请求该权限,我们可以使用abilityAccessCtrl模块中的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": [ 
        "bluetooth" 
      ], 
      "when":"always" 
    } 
  }, 
]
场景二:BLE蓝牙扫描

一旦获得了必要的权限,接下来就可以开始进行BLE设备的扫描了。HarmonyOS NEXT提供了ble模块来处理BLE相关的操作。下面的代码展示了如何启动BLE扫描并处理扫描结果:

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(() => { 
            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 = {}; 
              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 : '蓝牙未开启扫描') 
          .textAlign(TextAlign.Center) 
          .fontSize(12) 
          .border({ width: 1 }) 
          .padding(10) 
          .margin(10) 
          .width('80%') 
          .height(200) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}
场景三:蓝牙模块能力展示

除了基本的BLE扫描功能,HarmonyOS NEXT还提供了丰富的蓝牙模块API,包括但不限于:

⦁    开启蓝牙:access.enableBluetooth。

⦁    关闭蓝牙:access.disableBluetooth。

⦁    获取蓝牙配对列表:connection.getPairedDevices。

⦁    获取蓝牙配对状态:connection.getPairState。

⦁    订阅蓝牙设备发现上报事件:connection.on('bluetoothDeviceFind')。

⦁    取消订阅蓝牙设备发现上报事件:connection.off('bluetoothDeviceFind')。

⦁    开启蓝牙扫描,可以发现远端设备:connection.startBluetoothDiscovery。

⦁    关闭蓝牙扫描:connection.stopBluetoothDiscovery。

⦁    发起蓝牙配对:connection.pairDevice。

⦁    创建一个服务端监听Socket:socket.sppListen。

这些功能的实现依赖于@ohos.bluetooth.access@ohos.bluetooth.connection@ohos.bluetooth.socket等模块。例如,开启蓝牙的代码如下:

Button('蓝牙-开启').onClick(() => { 
  hilog.info(0x00000, TAG, '蓝牙-开启'); 
  try { 
    access.enableBluetooth(); 
  } catch (err) { 
    hilog.info(0x00000, TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); 
  } 
})


标签:err,ble,蓝牙,HarmonyOS,connection,BLE,data
From: https://blog.51cto.com/u_15171169/12108035

相关文章

  • 章14——Hashtable
    键和值为NULL时会抛出空指针异常。KEY重复且无NULL时同样会替换,和HashMap是一样的。按照2倍+1的规律去扩容与HASHMAP对比PROPERTIES,也是MAP接口的实现类,是Hashtable的子类.properties文件通常是用于数据库的配置文件,储存数据库的用户名密码等东西详细可见博客园博客:Java......
  • Android连接蓝牙自定义封装SDK(基于Cordova与ionic)
    今天给大家分享一款基于Cordova与ionic框架自定义封装的Android手机连接蓝牙的插件。自己公司遇到的业务需求是,与第三方公司合作,需要在项目现场打印项目物资与物料验收单,后期提供给财务核对报销等。第三方公司提供蓝牙打印机与手持机,我们需要自己结合业务开发相对应的功能。......
  • Codable解析JSON
    当然可以!下面我会详细讲解如何在Swift中解析JSON文件,使用Codable协议的方法。示例:解析一个简单的JSON文件假设我们有一个名为example.json的JSON文件,内容如下:{"name":"JohnDoe","age":30}第一步:定义数据模型首先,我们需要定义一个与JSON数据结构......
  • Tableau|二 如何利用功能区创建视图
    一认识Tableau数据1.数据角色维度和度量是Tableau的一种数据角色划分,离散和连续是另一种划分方式。1.维度和度量维度往往是一些分类、时间方面的定性字段,将其拖放到功能区时,Tableau不会对其进行计算,而是对视图区进行分区。度量往往是数值字段,将其拖放到功能区时,Ta......
  • 华为HarmonyOS灵活高效的消息推送服务(Push Kit) - 5 发送通知消息
    场景介绍通知消息通过PushKit通道直接下发,可在终端设备的通知中心、锁屏、横幅等展示,用户点击后拉起应用。您可以通过设置通知消息样式来吸引用户。开通权益PushKit根据消息内容,将通知消息分类为服务与通讯、资讯营销两大类别,开放通知消息自分类权益。两种类型的通知消息......
  • 【HarmonyOS】开启沉浸式(全屏)并获取顶部状态栏和底部导航条高度
    鸿蒙开启沉浸式(全屏)并获取顶部状态栏和底部导航条高度1.获取主窗口constwin=windowStage.getMainWindowSync()2.开启沉浸式win.setWindowLayoutFullScreen(true)3.顶部状态栏高度//获取状态栏区域 letarea=win.getWindowAvoidArea(window.AvoidAreaType.......
  • Android 11.0 蓝牙音乐获取歌手、歌曲等信息功能实现
    1.前言在11.0的系统rom定制化开发中,在一些功能性开发中,可能会遇到一些蓝牙音乐的项目,所以会要求在手机端获取蓝牙音乐的歌手歌曲的信息功能,这就需要了解Bluetooth的音乐播放功能,然后实现这些获取歌手信息和歌曲详情的功能2.蓝牙音乐获取歌手、歌曲等信息功能实现的核心类pa......
  • HarmonyOS开发之横竖屏旋转适配
    场景描述在HarmonyOS移动应用开发中,横竖屏旋转适配成为了一个不可或缺的功能点。特别是在HarmonyOSNEXT平台,开发者面临着更加多样化的设备和更复杂的用户交互需求。以下是我们在项目中遇到的一些关于横竖屏旋转的高频问题及解决方案:如何通过传感器自己感知方向并设置旋转:在不考虑......
  • PHY6252 国产低功耗蓝牙5.2 SOC芯片 智能手环/智能家居方案 智能照明
    PHY6252国产低功耗蓝牙5.2SOC芯片智能手环/智能家居方案智能照明应用领域智能穿戴设备智能家居智能照明智能电表医疗健康智能楼宇智慧工业遥控器等SSOP24PHY6252是一款支持BLE5.2功能的系统级芯片(SoC),集成了低功耗的高性能多模射频收发机,搭载32位......
  • blender设置背景图怎么添加?blender云渲染选择
    Blender是一款功能强大的3D建模软件,它以流畅的操作体验和直观的用户界面而闻名。使用Blender,你可以轻松地为你的3D模型添加背景图片。以下是具体的操作步骤:1、启动Blender:首先,打开Blender软件。访问添加菜单:在Blender的界面顶部,找到并点击“添加”菜单。2、选择背景图像:在“......