当前位置: 首页 > news >正文

【鸿蒙蓝牙连接】

鸿蒙蓝牙连接

  • ble.startBLEScan

startBLEScan(filters: Array, options?: ScanOptions): void
发起BLE扫描流程。
需要权限:ohos.permission.ACCESS_BLUETOOTH
在这里插入图片描述

import { BusinessError } from '@ohos.base';
function onReceiveEvent(data: Array<ble.ScanResult>) {console.info('BLE scan device find result = '+ JSON.stringify(data));
}
try {ble.on("BLEDeviceFind", onReceiveEvent);let scanFilter: ble.ScanFilter = {deviceId:"XX:XX:XX:XX:XX:XX",name:"test",serviceUuid:"00001888-0000-1000-8000-00805f9b34fb"};let scanOptions: ble.ScanOptions = {interval: 500,dutyMode: ble.ScanDuty.SCAN_MODE_LOW_POWER,matchMode: ble.MatchMode.MATCH_MODE_AGGRESSIVE,}ble.startBLEScan([scanFilter],scanOptions);
} catch (err) {console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
  • ble.stopBLEScan

stopBLEScan(): void
停止BLE扫描流程。
需要权限:ohos.permission.ACCESS_BLUETOOTH

import { BusinessError } from '@ohos.base';
try {ble.stopBLEScan();
} catch (err) {console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
  • connect
    connect(): void
    client端发起连接远端蓝牙低功耗设备。
    需要权限:ohos.permission.ACCESS_BLUETOOTH
import { BusinessError } from '@ohos.base';
try {let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');device.connect();
} catch (err) {console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
  • disconnect
    disconnect(): void
    client端断开与远端蓝牙低功耗设备的连接。
    需要权限:ohos.permission.ACCESS_BLUETOOTH
import { BusinessError } from '@ohos.base';
try {let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');device.disconnect();
} catch (err) {console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
  • 下面是测试例子:
import { BusinessError } from '@ohos.base';
import ble from '@ohos.bluetooth.ble';
import { TAG } from '@ohos/hypium/src/main/Constant';@Entry
@Component
struct BluetoothText {@State message: string = '蓝牙测试界面';@State scanResults: Array<string> = [];  // 存储扫描结果private scannedDeviceIds: Set<string> = new Set();  // 存储已经扫描到的设备IDprivate targetDeviceId: string = "7C:87:CE:1D:DF:F2";  // 目标设备的Device IDprivate gattClientDevice: ble.GattClientDevice | null = null;mBorder: BorderOptions = { radius: 10, color: '#385E0F', width: 1 };fontSize = 16mColor: string = '#2E8B57'build() {Row() {Column() {// 显示当前状态信息Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Row() {Button("连接").fontSize(this.fontSize).height('60%').width('40%').border(this.mBorder).backgroundColor(this.mColor).onClick(() => {this.startBLEScan();});Button("停止").fontSize(this.fontSize).height('60%').width('40%').border(this.mBorder).backgroundColor(this.mColor).onClick(() => {this.stopBLEScan();});}.width('30%').height('10%').padding({ left: 10, right: 10 })// 滚动容器,用于显示扫描结果列表Scroll() {Column() {  // 使用 Column 作为 Scroll 的唯一子组件ForEach(this.scanResults, (result: string) => {Text(result).fontSize(20).fontColor(Color.Black).padding(10)})}}.height('80%')  // 设置滚动区域高度.width('100%')}.width('100%')}.height('100%')}startBLEScan() {// 使用箭头函数定义try {ble.on("BLEDeviceFind", this.onReceiveEvent);  // 直接传递引用let scanFilter: ble.ScanFilter = {deviceId: this.targetDeviceId,};let scanOptions: ble.ScanOptions = {interval: 500,dutyMode: ble.ScanDuty.SCAN_MODE_LOW_POWER,matchMode: ble.MatchMode.MATCH_MODE_AGGRESSIVE,};ble.startBLEScan([scanFilter], scanOptions);this.message = 'Scanning...';} catch (err) {console.error('errCode: ' + err.code + ', errMessage: ' + err.message);this.message = 'Scan failed: ' + err.message;}}onReceiveEvent = (data: Array<ble.ScanResult>) => {console.info('BLE scan device find result = ' + JSON.stringify(data));let newResults = data.map((device) => {if (!this.scannedDeviceIds.has(device.deviceId)) {this.scannedDeviceIds.add(device.deviceId);  // 添加设备ID到集合中if (device.deviceId === this.targetDeviceId) {// 创建并连接到 GATT 客户端设备try {this.gattClientDevice = ble.createGattClientDevice(device.deviceId);this.gattClientDevice.connect();console.debug(TAG,"连接成功")} catch (err) {console.error('创建GATT客户端设备失败,errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);this.message = '创建GATT客户端设备失败';}}console.debug(TAG,`Device Name: ${device.deviceName || 'Unknown'}, Device ID: ${device.deviceId}`);return `Device Name: ${device.deviceName || 'Unknown'}, Device ID: ${device.deviceId}`;}return null;}).filter(result => result !== null);  // 过滤掉 null 值this.scanResults = [...this.scanResults, ...newResults as string[]];  // 合并新旧结果this.message = 'Scan result received!';}//停止蓝牙扫描stopBLEScan(){try {ble.stopBLEScan();this.gattClientDevice?.disconnect();} catch (err) {console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【网络安全】子域名接管概念+实例详析
  • vuex和Pinia
  • 一文读懂网络安全
  • 基于微信小程序的挂号管理系统-小程序端
  • ARM的寄存器组织
  • 代码审计总结
  • 『功能项目』DOTween动态文字【26】
  • 10、Django Admin修改标题
  • 每日一练 | 复杂流分类的应用
  • 完整指南:CNStream流处理多路并发框架适配到NVIDIA Jetson Orin (一) 依赖库编译、第三方库编译安装
  • c++命令模式
  • 【如何用远程连接到ubuntu服务器上的redis】
  • linux(ubuntu)安装QT-ros插件
  • 开源还是封闭?人工智能的两难选择
  • 软件渗透测试流程和方法简析,专业软件测评机构推荐
  • 自己简单写的 事件订阅机制
  • 《深入 React 技术栈》
  • C# 免费离线人脸识别 2.0 Demo
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • JavaScript的使用你知道几种?(上)
  • Js基础——数据类型之Null和Undefined
  • learning koa2.x
  • Lsb图片隐写
  • orm2 中文文档 3.1 模型属性
  • React-redux的原理以及使用
  • WePY 在小程序性能调优上做出的探究
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 高度不固定时垂直居中
  • 机器学习中为什么要做归一化normalization
  • 力扣(LeetCode)21
  • 前端面试题总结
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 收藏好这篇,别再只说“数据劫持”了
  • 通过git安装npm私有模块
  • 用Visual Studio开发以太坊智能合约
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 带你开发类似Pokemon Go的AR游戏
  • ​批处理文件中的errorlevel用法
  • #Z0458. 树的中心2
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (Ruby)Ubuntu12.04安装Rails环境
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (简单) HDU 2612 Find a way,BFS。
  • (论文阅读11/100)Fast R-CNN
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (转)c++ std::pair 与 std::make
  • (转)h264中avc和flv数据的解析
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET4.0并行计算技术基础(1)
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • [20150904]exp slow.txt
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)