欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 【HarmonyOS】鸿蒙应用蓝牙功能实现 (一)

【HarmonyOS】鸿蒙应用蓝牙功能实现 (一)

2025/4/18 14:27:48 来源:https://blog.csdn.net/u010949451/article/details/141170173  浏览:    关键词:【HarmonyOS】鸿蒙应用蓝牙功能实现 (一)

【HarmonyOS】鸿蒙应用蓝牙功能实现

前言

蓝牙技术是一种无线通信技术,可以在短距离内传输数据。它是由爱立信公司于1994年提出的,使用2.4 GHz的ISM频段,可以在10米左右的距离内进行通信。可以用于连接手机、耳机、音箱、键盘、鼠标、打印机等各种设备。

特点是低功耗、低成本、简单易用。目前已经发展到了第五代,支持更高的数据传输速率和更广的覆盖范围。

蓝牙实现原理

蓝牙的实现原理是基于无线电技术的短距离通信协议,使用2.4GHz频段的无线电波进行通信,使用频率跳跃技术(Frequency Hopping Spread Spectrum,FHSS)来避免与其他无线设备的干扰。
在通信过程中,蓝牙设备会发送和接收数据包,并且使用不同的蓝牙协议来控制通信流程和数据传输。

在这里插入图片描述
蓝牙跳频技术的原理

蓝牙跳频技术主要基于频率跳跃技术,即通过在不同频率上快速跳跃来发送数据。这种技术可以防止干扰和噪声影响数据传输,提高数据传输的可靠性。具体来说,当某条频率受到干扰或噪声时,系统会自动切换到其他频率上进行传输,从而确保数据的完整性和稳定性。

DEMO示例

以下为蓝牙开关和状态控制

import { access } from '@kit.ConnectivityKit';
import { BusinessError } from '@kit.BasicServicesKit';export class BlueToothMgr {private static mBlueToothMgr: BlueToothMgr | undefined = undefined;public Ins(){if(BlueToothMgr.mBlueToothMgr){BlueToothMgr.mBlueToothMgr = new BlueToothMgr();}return BlueToothMgr.mBlueToothMgr;}// STATE_OFF	0	表示蓝牙已关闭。// STATE_TURNING_ON	1	表示蓝牙正在打开。// STATE_ON	2	表示蓝牙已打开。// STATE_TURNING_OFF	3	表示蓝牙正在关闭。// STATE_BLE_TURNING_ON	4	表示蓝牙正在打开LE-only模式。// STATE_BLE_ON	5	表示蓝牙正处于LE-only模式。// STATE_BLE_TURNING_OFF	6	表示蓝牙正在关闭LE-only模式。/*** 设置蓝牙访问(开关状态)* @param isAccess true: 打开蓝牙*/setBlueToothAccess(isAccess: boolean){try {if(isAccess){access.enableBluetooth();access.on('stateChange', (data: access.BluetoothState) => {let btStateMessage = this.switchState(data);if (btStateMessage == 'STATE_ON') {access.off('stateChange');}console.info('bluetooth statues: ' + btStateMessage);})}else{access.disableBluetooth();access.on('stateChange', (data: access.BluetoothState) => {let btStateMessage = this.switchState(data);if (btStateMessage == 'STATE_OFF') {access.off('stateChange');}console.info("bluetooth statues: " + btStateMessage);})}} catch (err) {console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}}private switchState(data: access.BluetoothState){let btStateMessage = '';switch (data) {case 0:btStateMessage += 'STATE_OFF';break;case 1:btStateMessage += 'STATE_TURNING_ON';break;case 2:btStateMessage += 'STATE_ON';break;case 3:btStateMessage += 'STATE_TURNING_OFF';break;case 4:btStateMessage += 'STATE_BLE_TURNING_ON';break;case 5:btStateMessage += 'STATE_BLE_ON';break;case 6:btStateMessage += 'STATE_BLE_TURNING_OFF';break;default:btStateMessage += 'unknown status';break;}return btStateMessage;}
}
import { access } from '@kit.ConnectivityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { BlueToothMgr } from '../manager/BlueToothMgr';
import { abilityAccessCtrl, common } from '@kit.AbilityKit';

struct Index {private TAG: string = "BlueToothTest";// 蓝牙状态 isStartBlueTooth: boolean = false; userGrant: boolean = false;async aboutToAppear() {await this.requestBlueToothPermission();let state = access.getState();console.log(this.TAG, "getState state: " + state);if(state == 2){this.isStartBlueTooth = true;}else{this.isStartBlueTooth = false;}}// 用户申请权限async reqPermissionsFromUser(): Promise<number[]> {let context = getContext() as common.UIAbilityContext;let atManager = abilityAccessCtrl.createAtManager();let grantStatus = await atManager.requestPermissionsFromUser(context, ['ohos.permission.ACCESS_BLUETOOTH']);return grantStatus.authResults;}// 用户申请蓝牙权限async requestBlueToothPermission() {let grantStatus = await this.reqPermissionsFromUser();for (let i = 0; i < grantStatus.length; i++) {if (grantStatus[i] === 0) {// 用户授权,可以继续访问目标操作this.userGrant = true;}}}setBlueToothState =()=>{try {if(!this.isStartBlueTooth){BlueToothMgr.Ins().setBlueToothAccess(true);}else{BlueToothMgr.Ins().setBlueToothAccess(false);}let state = access.getState();if(state == 2){this.isStartBlueTooth = true;}else{this.isStartBlueTooth = false;}console.log(this.TAG, "getState state: " + state);} catch (err) {console.error(this.TAG,'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);}}build() {RelativeContainer() {if(this.userGrant){Text("蓝牙状态:" + this.isStartBlueTooth ? "开启" : "关闭").id('HelloWorld').fontSize(50).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(this.setBlueToothState)}}.height('100%').width('100%')}
}

加权限配置:在这里插入图片描述

    "requestPermissions": [{"name" : "ohos.permission.ACCESS_BLUETOOTH","reason": "$string:permission_name","usedScene": {"abilities": ["EntryAbility"],"when":"inuse"}}]

操作日志:
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词