HarmonyOS鸿蒙Next中本地调用蓝牙怎么实现

HarmonyOS鸿蒙Next中本地调用蓝牙怎么实现 有没有一个本地调取蓝牙的demo可以做个参考?

3 回复

可以参考以下demo:

import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
// 使用UIExtensionAbility:将common.UIAbilityContext 替换为common.UIExtensionContext
import bundleManager from '@ohos.bundle.bundleManager';

async function checkAccessToken(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> {
  let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
  let grantStatus: abilityAccessCtrl.GrantStatus = abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;
  // 获取应用程序的accessTokenID
  let tokenId: number = 0;
  try {
    let bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
    let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo;
    tokenId = appInfo.accessTokenId;
  } catch (error) {
    const err: BusinessError = error as BusinessError;
    console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`);
  }
  // 校验应用是否被授予权限
  try {
    grantStatus = await atManager.checkAccessToken(tokenId, permission);
  } catch (error) {
    const err: BusinessError = error as BusinessError;
    console.error(`Failed to check access token. Code is ${err.code}, message is ${err.message}`);
  }
  return grantStatus;
}

@Entry
@Component
struct Index {
  onPageShow(): void {
    //检测蓝牙权限是否开启
    checkAccessToken('ohos.permission.USE_BLUETOOTH')
      .then((res) => {
        if (res == -1) {
          //未授权
          let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
          this.reqPermissionsFromUser(this.permissions, context)
        } else {
          //已授权不做任何操作
        }
      })
  }

  reqPermissionsFromUser(permissions: Array<Permissions>, context: common.UIAbilityContext): void {
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
    atManager.requestPermissionsFromUser(context, permissions).then((data) => {
      let grantStatus: Array<number> = data.authResults;
      let length: number = grantStatus.length;
      for (let i = 0; i < length; i++) {
        if (grantStatus[i] === 0) {
          this.bule = true
          // 用户授权,可以继续访问目标操作
        } else {
          // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
          let context = getContext(this) as common.UIAbilityContext;
          context.startAbility({
            bundleName: 'com.huawei.hmos.settings',
            abilityName: 'com.huawei.hmos.settings.MainAbility',
            uri: 'application_info_entry',
            parameters: {
              pushParams: 'com.example.myapplication' // 应用包名
            }
          });
          return;
        }
      }
      // 授权成功
    }).catch((err: BusinessError) => {
      console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
    })
  }

  permissions: Array<Permissions> = ['ohos.permission.ACCESS_BLUETOOTH'];
  @State bule: boolean = true

  build() {
    Column() {}
  }
}

更多关于HarmonyOS鸿蒙Next中本地调用蓝牙怎么实现的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,本地调用蓝牙功能可以通过@ohos.bluetooth模块实现。首先,需要在应用的config.json文件中声明蓝牙权限:

{
  "module": {
    "reqPermissions": [
      {
        "name": "ohos.permission.USE_BLUETOOTH"
      },
      {
        "name": "ohos.permission.DISCOVER_BLUETOOTH"
      },
      {
        "name": "ohos.permission.MANAGE_BLUETOOTH"
      }
    ]
  }
}

然后,在代码中引入@ohos.bluetooth模块:

import bluetooth from '@ohos.bluetooth';

接下来,可以通过bluetooth模块提供的API进行蓝牙操作。例如,开启蓝牙:

bluetooth.enableBluetooth().then(() => {
  console.log('Bluetooth enabled');
}).catch((err) => {
  console.error('Failed to enable Bluetooth:', err);
});

扫描附近的蓝牙设备:

bluetooth.startBluetoothDiscovery().then(() => {
  console.log('Bluetooth discovery started');
}).catch((err) => {
  console.error('Failed to start Bluetooth discovery:', err);
});

获取已配对的设备列表:

bluetooth.getPairedDevices().then((devices) => {
  console.log('Paired devices:', devices);
}).catch((err) => {
  console.error('Failed to get paired devices:', err);
});

连接蓝牙设备:

bluetooth.createBond(deviceId).then(() => {
  console.log('Bond created with device:', deviceId);
}).catch((err) => {
  console.error('Failed to create bond:', err);
});

以上是HarmonyOS鸿蒙Next中本地调用蓝牙的基本实现方法。

在HarmonyOS鸿蒙Next中,本地调用蓝牙功能可以通过以下步骤实现:

  1. 获取蓝牙适配器:使用BluetoothAdapter.getDefaultAdapter()获取蓝牙适配器实例。
  2. 检查蓝牙状态:通过isEnabled()方法检查蓝牙是否开启,若未开启可调用enable()方法启用。
  3. 扫描设备:调用startDiscovery()开始扫描附近的蓝牙设备,并通过BluetoothDevice获取设备信息。
  4. 配对与连接:使用createBond()方法进行配对,通过BluetoothSocket建立连接。
  5. 数据通信:通过InputStreamOutputStream进行数据传输。

确保在config.json中声明蓝牙权限ohos.permission.USE_BLUETOOTHohos.permission.LOCATION

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!