【每日学点鸿蒙知识】低功耗蓝牙、指纹识别认证、读取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这一种类型。
相关推荐
m0_6855350820 小时前
华为光学工程师笔试真题(含答案与深度解析)
华为·光学·光学设计·光学工程·镜头设计
lqj_本人20 小时前
鸿蒙原生与Qt混合开发:性能优化与资源管理
qt·harmonyos
lqj_本人21 小时前
鸿蒙Qt字体实战:消灭“豆腐块“乱码与自定义字体加载
qt·华为·harmonyos
大侠课堂21 小时前
海康大华大疆华为中兴追觅经典面试题200道完整版
华为
爱笑的眼睛1121 小时前
深入探索HarmonyOS中RichText组件的HTML渲染机制
华为·harmonyos
IT闫21 小时前
figlet 在鸿蒙PC上的构建与适配
华为·harmonyos
全栈陈序员1 天前
Whois 工具在 HarmonyOS PC 上的交叉编译实践
华为·harmonyos
空白诗1 天前
tokei 在鸿蒙PC上的构建与适配
后端·华为·rust·harmonyos
汉堡黄1 天前
鸿蒙开发:案例集合Tabs:分段按钮组件
harmonyos
哈__1 天前
exa 在 HarmonyOS 上的构建与适配
elasticsearch·华为·harmonyos