首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

鸿蒙5.0开发【API13】系统能力SystemCapability使用

  • 25-01-18 14:24
  • 3146
  • 13472
blog.csdn.net

概述

系统能力与 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文件示例如下。

{
  "devices": {
    "general": [
      // 每一个典型设备对应一个syscap支持能力集,可配置多个典型设备,应与工程所选择的设备一致
      "phone"
    ]
  },
  "development": {
    // addedSysCaps内的sycap集合与devices中配置的各设备支持的syscap集合的并集共同构成联想能力集。
    "addedSysCaps": [
      "SystemCapability.Communication.NFC.Core",
      "SystemCapability.Communication.NFC.CardEmulation",
      "SystemCapability.Communication.NFC.Tag"
    ]
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

单设备应用开发

默认应用的联想能力集,要求系统能力集和设备的支持系统能力集相等,开发者修改要求能力集需要慎重。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

跨设备应用开发

默认应用的联想能力集是多个设备支持能力集的并集,要求能力集则是交集。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

判断 API 是否可以使用

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

  • ArkTS API

  • 方法1:系统定义了API canIUse帮助开发者来判断该设备是否支持某个特定的syscap。

if (canIUse("SystemCapability.ArkUI.ArkUI.Full")) {
   console.log("该设备支持SystemCapability.ArkUI.ArkUI.Full");
} else {
   console.log("该设备不支持SystemCapability.ArkUI.ArkUI.Full");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 方法2:开发者可通过import的方式将模块导入,若当前设备不支持该模块,import的结果为undefined,开发者在使用其API时,需要判断其是否存在。
import geolocationManager from '@ohos.geoLocationManager';

if (geolocationManager) {
geolocationManager.getCurrentLocation((location) => {
    console.log('current location: ' + JSON.stringify(location));
});
} else {
console.log('该设备不支持位置信息');
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • Native API
#include 
#include 
#include "syscap_ndk.h"

char syscap[] = "SystemCapability.ArkUI.ArkUI.Full";
bool result = canIUse(syscap);
if (result) {
    printf("SysCap: %s is supported!\n", syscap);
} else {
    printf("SysCap: %s is not supported!\n", syscap);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

除此之外,开发者可以通过API参考文档查询API接口所属的SysCap。

不同设备相同能力的差异检查

即使是相同的系统能力,在不同的设备下,也会有能力的差异。比如同是摄像头的能力,平板设备优于智能穿戴设备。

import userAuth from '@ohos.userIAM.userAuth';

const authenticator = userAuth.getAuthenticator();
const result = authenticator.checkAbility('FACE_ONLY', 'S1');

if (result == authenticator.CheckAvailabilityResult.AUTH_NOT_SUPPORT) {
    console.log('该设备不支持人脸识别');
}
//强行调用不支持的 API 会返回错误信息,但不会出现语法错误。
authenticator.execute('FACE_ONLY', 'S1', (err, result) => {
    if (err) {
        console.log(err.message);
        return;
    }
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

设备间的SysCap差异如何产生的

设备的SysCap因产品解决方案厂商拼装的部件组合不同而不同,整体流程如下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 一套操作系统源码由可选和必选部件集组成,不同的部件为对外体现的系统能力不同,即部件与 SysCap 之间映射关系。
  2. 发布归一化的SDK,API与SysCap之间存在映射关系。
  3. 产品解决方案厂商按硬件能力和产品诉求,可按需拼装部件。
  4. 产品配置的部件可以是系统部件,也可以是三方开发的私有部件,由于部件与SysCap间存在映射,所有拼装后即可得到该产品的SysCap集合。
  5. SysCap集编码生成 PCID (Product Compatibility ID, 产品兼容性标识),应用开发者可将PCID导入IDE解码成SysCap,开发时对设备的SysCap差异做兼容性处理。
  6. 部署到设备上的系统参数中包含了SysCap集,系统提供了native的接口和应用接口,可供系统内的部件和应用查询某个SysCap是否存在。
  7. 应用开发过程中,应用必要的SysCap将被编码成RPCID(Required Product Compatibility ID),并写入应用安装包中。应用安装时,包管理器将解码RPCID得到应用需要的 SysCap,与设备当前具备的SysCap比较,若应用要求的SysCap都被满足,则安装成功。
  8. 应用运行时,可通过canIUse接口查询设备的SysCap,保证在不同设备上的兼容性。
获取鸿蒙Next全套学习资料
微信名片
注:本文转载自blog.csdn.net的移动开发技术栈的文章"https://blog.csdn.net/m0_70748845/article/details/143972362"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

135
HarmonyOS
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top