【每日学点鸿蒙知识】低功耗蓝牙、指纹识别认证、读取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这一种类型。
相关推荐
轻口味8 小时前
【每日学点鸿蒙知识】多个har依赖、指定编译架构、ArkTS与C++互相调用
c++·华为·harmonyos
gkkk_19 小时前
鸿蒙应用开发(2)
华为·harmonyos
HarmonyOS_SDK11 小时前
多样化消息通知样式,帮助应用提升日活跃度
harmonyos
塞尔维亚大汉14 小时前
【OpenHarmony】 鸿蒙矢量图形(SVG)之XmlGraphicsBatik
harmonyos·arkui
goodbruce15 小时前
HarmonyOS鸿蒙开发 MVVM模式及状态管理
harmonyos
轻口味18 小时前
【每日学点鸿蒙知识】Hap 安装失败、ArkTS 与C++ 数组转换、渐变遮罩效果等
c++·华为·harmonyos
SuperHeroWu718 小时前
【HarmonyOS】鸿蒙应用实现屏幕录制详解和源码
harmonyos·鸿蒙·视频·录屏·屏幕录制·沙箱·麦克风
轻口味18 小时前
【每日学点鸿蒙知识】一键登录、包资源分析工具、har包版本冲突、系统相册等
华为·harmonyos
法迪20 小时前
华为 Sensor 省电策略调研
华为·功耗
枫叶丹420 小时前
【HarmonyOS之旅】基于ArkTS开发(一) -> Ability开发一
ui·华为·harmonyos