【每日学点鸿蒙知识】低功耗蓝牙、指纹识别认证、读取raw文件示例、CommonEvent是否跨线程、定位参数解释等

1、HarmonyOS next系统,如何判断设备是否支持低功耗蓝牙?

可以通过 canIUse("SystemCapability.Communication.Bluetooth.Core") 判断是否支持。关于canIUse相关用法可参考官网文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-syscap-V5

系统能力(SystemCapability,简称SysCap),指操作系统中每一个相对独立的特性。不同的设备对应不同的系统能力集,每个系统能力对应一个或多个API。开发者可根据系统能力来判断是否可以使用某接口。

canIUse(syscap: string): boolean
参数:

参数名 类型 必填 说明
syscap string 待查询的系统能力名称。

返回值:

类型 说明
boolean 系统能力查询结果,true表示系统具备该能力,false表示系统不具备。
示例
复制代码
import { geoLocationManager } from '@kit.LocationKit'
import { BusinessError } from '@kit.BasicServicesKit';

const isLocationAvailable = canIUse('SystemCapability.Location.Location.Core');
if (isLocationAvailable) {
  geoLocationManager.getCurrentLocation((err: BusinessError, location: geoLocationManager.Location) => {
      if (err) {
          console.error('err=' + JSON.stringify(err));
      }
      if (location) {
          console.log('location=' + JSON.stringify(location));
      }
  });
} else {
  console.log('Location not by this device.');
}

2、HarmonyOS现在支持指纹识别认证吗?

想在应用账号密码登录的基础上,增加指纹识别登录,有对应的能力吗?

参见User Authentication Kit的切换自定义认证开发指导:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/apply-custom-authentication-V5

统一用户认证框架提供了切换业务自定义认证机制。如果设备厂商自定义了其他认证能力对接到统一用户认证框架,应用开发者可以切换到自定义认证的方式。

例如,在支付场景中,如果厂商自定义了支付密码认证的方式,当调用系统人脸或指纹认证失败后,用户可以选择切换支付密码认证。

支付密码认证不属于系统认证能力,因此业务在发起认证时需要传入导航键的显式信息,如"使用支付密码",这样用户看到的认证界面便会包含一个"使用支付密码"的按钮。

当用户点击该按钮,发起认证的业务应用便会收到统一用户认证框架返回的一个特殊认证结果,提示业务系统认证结束,需要拉起业务自定义的认证界面。这样,用户在点击"使用支付密码"按钮后,便会看到系统认证控件消失,显示出业务自定义的支付密码认证界面。

!\[【每日学点鸿蒙知识】24.09.29-1.png]

Kit支持生物特征认证+业务自定义认证方式,指纹+应用账号密码认证属于其中一种。应用也可以在账号认证界面上集成指纹的嵌入式认证控件,详见:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/user-auth-icon-V5

主要用于提供应用界面上展示的人脸、指纹认证图标,具体功能如下:

  1. 提供嵌入式人脸、指纹认证控件图标,可被应用集成。
  2. 支持自定义图标的颜色和大小,但图标样式不可变更。
  3. 点击控件图标后可拉起系统弹窗式人脸、指纹认证控件。

当前支持使用认证控件的认证类型包括:

  • 人脸认证
  • 指纹认证
  • 人脸+锁屏密码认证
  • 指纹+锁屏密码认证
  • 人脸+指纹+锁屏密码认证

!\[【每日学点鸿蒙知识】24.09.29.png]

3、HarmonyOS 读取raw文件参考示例?

复制代码
// 这里使用getRawFileContent的方式读取测试文本,并将文本内容打印出来
async loadFromRawFile(context: Context, rawFileName: string): void {
  let rawFileRes: Uint8Array = await context.resourceManager.getRawFileContent(rawFileName);
  let bufferLike: ArrayBufferLike = rawFileRes.buffer;
  let rawFileBuffer: ArrayBuffer = bufferLike.slice(0, bufferLike.byteLength);
  log.info('loadFromRawFile: ' + rawFileBuffer.byteLength);
  const decoder = util.TextDecoder.create('"utf-8"');
  const str = decoder.decodeWithStream(new Uint8Array(rawFileBuffer));
  log.info('loadFromRawFile ' + str);
}

loadRawFd(context: Context, rawFileName: string) {
  context.resourceManager.getRawFd(rawFileName, (err: BusinessError, value: resourceManager.RawFileDescriptor) => {
    let fd = value.fd;
    let offset = value.offset;
    let fdLength = value.length;
    log.info('fd: ' + value.fd + ', offset: ' + offset + ', length: ' + fdLength);
    let stream: fs.Stream = fs.fdopenStreamSync(fd, 'r');

    let stringBuffer = new ArrayBuffer(128); // 每次默认只装128个长度
    let currentLength = 0; // 当前已读取长度
    let readLength = 128; // 每次读取长度,默认128的长度
    while (currentLength < fdLength) {
      readLength = (fdLength - currentLength > 128) ? 128 : (fdLength - currentLength)
      stringBuffer = new ArrayBuffer(readLength);
      stream.readSync(stringBuffer, { offset: offset + currentLength, length: readLength });
      let decoder = util.TextDecoder.create('"utf-8"');
      let str = decoder.decodeWithStream(new Uint8Array(stringBuffer));
      log.info(str); // 解析成字符串并打印出日志
      currentLength += readLength; // 读取起始点
    }

    context.resourceManager.closeRawFdSync(rawFileName); // 文件读取完后,需要使用该接口将FD关掉
    // fs.closeSync(fd); // 不使用该API,已给研发提诉求优化指导。
    stream.closeSync();
  })
}

4、HarmonyOS CommonEvent能否跨线程?

比如一个sdk,做了一个cpu密集操作,执行的过程中,不断给宿主模块发送事件,通知更新进度或者其他什么状态。本质是,sdk感知不到外部环境,在线程中执行任务,过程中需要同步状态给外部

公共事件支持跨线程,参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/common-event-overview-V5

公共事件示意图:

!\[【每日学点鸿蒙知识】24.09.29-2.png]

5、HarmonyOS 调定位各参数含义?

1、调用geoLocationManager.getCurrentLocation(request?: CurrentLocationRequest)获取定位位置。可变参数request可配置priority、scenario、maxAccuracy,timeoutMs。如果不传request,直接调geoLocationManager.getCurrentLocation(),那么定位的那些配置默认分别都是怎么样的?

2、注册位置变化监听的api中参数含义咨询:

复制代码
let requestInfo:geoLocationManager.LocationRequest = {'priority': geoLocationManager.LocationRequestPriority.FIRST_FIX, 'timeInterval': 0, 'distanceInterval': 0, 'maxAccuracy': 0};
geoLocationManager.on('locationChange', requestInfo, locationChange);
  • distanceInterval:这个是指两次位置偏差超过distanceInterval米后会回调吗,还是什么?
  • maxAccuracy:精度信息,具体表示什么含义意思?
    定位回调信息additions中有个provider,看似像是定位来源,该provider共有哪几种值,分别是什么含义?

问题1:

priority、scenario、maxAccuracy等可以参考

timeoutMs目前默认值为30秒。

如果不传request,直接调geoLocationManager.getCurrentLocation(),那么定位的那些配置都会是默认配置,priority是First_Fix。

问题2:

  • distanceInterval:距离间隔,表示监听到两次位置偏差超过distanceInterval米后会回调。
  • maxAccuracy:精度信息,筛选展示中心点maxAccuracy米内的坐标。
    定位回调信息additions中有个provider,目前只提供network这一种类型。
相关推荐
花椒技术1 天前
HJPusher / HJPlayer SDK 实践:我们为什么把直播推播链路拆成一套可复用能力
设计模式·harmonyos·直播
一维Ace1 天前
HarmonyOS ArkTS 按钮组件全解:Button、Toggle 状态交互实战
harmonyos
anyup2 天前
来简单聊聊鸿蒙开发,万元奖金的事~
前端·华为·harmonyos
Georgewu2 天前
【无测试机别害怕】华为云鸿蒙云手机南:从零到联调全流程详解
harmonyos
Georgewu3 天前
【HarmonyOS 7】DevEco Code安装与使用
harmonyos
Georgewu3 天前
【HarmonyOS 7】鸿蒙应用开发如何屏蔽剪切板
harmonyos
谷子在生长4 天前
纯血鸿蒙自定义弹窗最佳实践:从「到处复制」到「一行调用」
前端·harmonyos
小魔女千千鱼4 天前
把 Go 塞进鸿蒙PC:windows上用 c-shared 跑 2048
harmonyos
TrisighT4 天前
Electron 跑在鸿蒙 PC 上,单窗口和多窗口内存差 800MB?我抓了 5 组数据
性能优化·electron·harmonyos