【每日学点鸿蒙知识】低功耗蓝牙、指纹识别认证、读取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这一种类型。
相关推荐
Robot2514 小时前
「华为」人形机器人赛道投资首秀!
大数据·人工智能·科技·microsoft·华为·机器人
鸿蒙布道师4 小时前
鸿蒙NEXT开发动画案例5
android·ios·华为·harmonyos·鸿蒙系统·arkui·huawei
小诸葛的博客11 小时前
华为ensp实现跨vlan通信
网络·华为·智能路由器
康康这名还挺多13 小时前
鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法
数据结构·list·harmonyos·lazyforeach
晚秋大魔王17 小时前
OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——nettle库
linux·开源·harmonyos
python算法(魔法师版)20 小时前
.NET 在鸿蒙系统上的适配现状
华为od·华为·华为云·.net·wpf·harmonyos
bestadc1 天前
鸿蒙 UIAbility组件与UI的数据同步和窗口关闭
harmonyos
枫叶丹41 天前
【HarmonyOS Next之旅】DevEco Studio使用指南(二十二)
华为·harmonyos·deveco studio·harmonyos next
ax一号街阿楠1 天前
华为FAT AP配置 真机
网络·华为·智能路由器
吗喽对你问好1 天前
华为5.7机考第一题充电桩问题Java代码实现
java·华为·排序