鸿蒙5.0开发【API13】体系本领SystemCapability使用

打印 上一主题 下一主题

主题 969|帖子 969|积分 2909

概述

体系本领与 API

SysCap,全称SystemCapability,即体系本领,指操纵体系中每一个相对独立的特性,如蓝牙,WIFI,NFC,摄像头等,都是体系本领之一。每个体系本领对应多个API,随着目标装备是否支持该体系本领共同存在或消失,也会随着DevEco Studio一起提供给开发者做遐想。

开发者可以在[SysCap列表]中查询HarmonyOS的本领集。
支持本领集,遐想本领集与要求本领集

支持本领集,遐想本领集与要求本领集都是体系本领的集合。
支持本领集描述的是装备本领,要求本领集描述的是应用本领。若应用A的要求本领集是装备N的支持本领集的子集,则应用A可分发到装备N上安装运行,否则不能分发。
遐想本领集是该应用开发时,DevEco Studio可遐想的API所在的体系本领集合。

装备与支持本领集

每个装备根据其硬件本领,对应差别的支持本领集。
SDK将装备分为两组,典型装备和自定义装备,典型装备的支持本领集由HarmonyOS来定义,自定义装备由装备厂商给出。

装备与SDK本领的对应

SDK向DevEco Studio提供全量API,DevEco Studio识别开发者项目中选择的装备形态,找到该装备的支持本领集,筛选支持本领集包含的API并提供API遐想。

SysCap开发指导

加入自定义syscap

在某具体的装备型号上,本领可能超出工程默认装备定义的本领集范围,假如需要使用此部分本领,需要额外配置自定义的syscap。
请在DevEco Studio工程的模块/src/main目录下,手动创建syscap.json文件。如在entry/src/main目录右键,点击New > File。

新建文件定名为syscap.json。

打开新建的syscap.json文件。

按如下格式填入所需要使用的SysCaps。以使用NFC本领为例,syscap.json文件示比方下。
  1. {
  2.   "devices": {
  3.     "general": [
  4.       // 每一个典型设备对应一个syscap支持能力集,可配置多个典型设备,应与工程所选择的设备一致
  5.       "phone"
  6.     ]
  7.   },
  8.   "development": {
  9.     // addedSysCaps内的sycap集合与devices中配置的各设备支持的syscap集合的并集共同构成联想能力集。
  10.     "addedSysCaps": [
  11.       "SystemCapability.Communication.NFC.Core",
  12.       "SystemCapability.Communication.NFC.CardEmulation",
  13.       "SystemCapability.Communication.NFC.Tag"
  14.     ]
  15.   }
  16. }
复制代码
单装备应用开发

默认应用的遐想本领集,要求体系本领集和装备的支持体系本领集相当,开发者修改要求本领集需要慎重。

跨装备应用开发

默认应用的遐想本领集是多个装备支持本领集的并集,要求本领集则是交集。

判断 API 是否可以使用

当前提供了ArkTS API和Native API用于帮助判断某个API是否可以使用。


  • ArkTS API
  • 方法1:体系定义了API canIUse帮助开发者来判断该装备是否支持某个特定的syscap。
  1. if (canIUse("SystemCapability.ArkUI.ArkUI.Full")) {
  2.    console.log("该设备支持SystemCapability.ArkUI.ArkUI.Full");
  3. } else {
  4.    console.log("该设备不支持SystemCapability.ArkUI.ArkUI.Full");
  5. }
复制代码


  • 方法2:开发者可通过import的方式将模块导入,若当前装备不支持该模块,import的结果为undefined,开发者在使用其API时,需要判断其是否存在。
  1. import geolocationManager from '@ohos.geoLocationManager';
  2. if (geolocationManager) {
  3. geolocationManager.getCurrentLocation((location) => {
  4.     console.log('current location: ' + JSON.stringify(location));
  5. });
  6. } else {
  7. console.log('该设备不支持位置信息');
  8. }
复制代码


  • Native API
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "syscap_ndk.h"
  4. char syscap[] = "SystemCapability.ArkUI.ArkUI.Full";
  5. bool result = canIUse(syscap);
  6. if (result) {
  7.     printf("SysCap: %s is supported!\n", syscap);
  8. } else {
  9.     printf("SysCap: %s is not supported!\n", syscap);
  10. }
复制代码
除此之外,开发者可以通过API参考文档查询API接口所属的SysCap。
差别装备类似本领的差异检查

即使是类似的体系本领,在差别的装备下,也会有本领的差异。比如同是摄像头的本领,平板装备优于智能穿戴装备。
  1. import userAuth from '@ohos.userIAM.userAuth';
  2. const authenticator = userAuth.getAuthenticator();
  3. const result = authenticator.checkAbility('FACE_ONLY', 'S1');
  4. if (result == authenticator.CheckAvailabilityResult.AUTH_NOT_SUPPORT) {
  5.     console.log('该设备不支持人脸识别');
  6. }
  7. //强行调用不支持的 API 会返回错误信息,但不会出现语法错误。
  8. authenticator.execute('FACE_ONLY', 'S1', (err, result) => {
  9.     if (err) {
  10.         console.log(err.message);
  11.         return;
  12.     }
  13. })
复制代码
装备间的SysCap差异如何产生的

装备的SysCap因产品办理方案厂商拼装的部件组合差别而差别,团体流程如下图:


  • 一套操纵体系源码由可选和必选部件集组成,差别的部件为对外体现的体系本领差别,即部件与 SysCap 之间映射关系。
  • 发布归一化的SDK,API与SysCap之间存在映射关系。
  • 产品办理方案厂商按硬件本领和产品诉求,可按需拼装部件。
  • 产品配置的部件可以是体系部件,也可以是三方开发的私有部件,由于部件与SysCap间存在映射,全部拼装后即可得到该产品的SysCap集合。
  • SysCap集编码生成 PCID (Product Compatibility ID, 产品兼容性标识),应用开发者可将PCID导入IDE解码成SysCap,开发时对装备的SysCap差异做兼容性处理。
  • 部署到装备上的体系参数中包含了SysCap集,体系提供了native的接口和应用接口,可供体系内的部件和应用查询某个SysCap是否存在。
  • 应用开发过程中,应用必要的SysCap将被编码成RPCID(Required Product Compatibility ID),并写入应用安装包中。应用安装时,包管理器将解码RPCID得到应用需要的 SysCap,与装备当前具备的SysCap比力,若应用要求的SysCap都被满足,则安装成功。
  • 应用运行时,可通过canIUse接口查询装备的SysCap,保证在差别装备上的兼容性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表