【HarmonyOS】鸿蒙应用蓝牙功能实现(一)
 作者:GeorgeGcs
- 2025-06-24  上海
- 本文字数:2982 字 - 阅读完需:约 10 分钟 
##鸿蒙开发能力 ##HarmonyOS SDK 应用服务 ##鸿蒙金融类应用 (金融理财 #
前言
蓝牙技术是一种无线通信技术,可以在短距离内传输数据。它是由爱立信公司于 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';
@Entry@Componentstruct Index {
  private TAG: string = "BlueToothTest";
  // 蓝牙状态  @State isStartBlueTooth: boolean = false;  @State 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"    }  }]
复制代码
 操作日志:
 
 划线
评论
复制
发布于: 刚刚阅读数: 5

GeorgeGcs
关注
路漫漫其修远兮,吾将上下而求索。 2024-12-24 加入
鸿蒙创作先锋,华为HDE专家,鸿蒙讲师,作者。 目前任职鸿蒙应用架构师。历经腾讯,宝马,研究所,金融。 待过私企,外企,央企。 深耕大应用开发领域十年。 OpenHarmony,HarmonyOS,Flutter,H5,Android,IOS。







 
    
 
				 
				 
			


评论