赞
踩
由于OpenHarmony允许安装三方应用,所以需要对三方应用的敏感权限调用进行管控,具体实现是应用在开发阶段就需要在应用配置文件中指明此应用在运行过程中可能会调用哪些敏感权限,这些权限包括静态权限和动态权限,静态权限表示只需要在安装阶段注册就可以,而动态权限一般表示获取用户的敏感信息,所以需要在运行时让用户确认才可以调用,授权方式包括系统设置应用手动授权等。除了运行时对应用调用敏感权限进行管控外,还需要利用应用签名管控手段确保应用安装包已经被设备厂商进行了确认。
表1 OpenHarmony系统权限列表
OpenHarmony系统权限 | 授权方式 | 权限说明 |
---|---|---|
ohos.permission.LISTEN_BUNDLE_CHANGE | system_grant(静态权限) | 允许该应用获取应用变化消息。 |
ohos.permission.GET_BUNDLE_INFO | system_grant(静态权限) | 允许该应用获取应用信息。 |
ohos.permission.INSTALL_BUNDLE | system_grant(静态权限) | 允许该应用安装应用。 |
ohos.permission.CAMERA | user_grant(动态权限) | 此应用可随时使用相机拍摄照片和录制视频。 |
ohos.permission.MODIFY_AUDIO_SETTINGS | system_grant(静态权限) | 允许该应用修改全局音频设置,例如音量和用于输出的扬声器。 |
ohos.permission.READ_MEDIA | user_grant(动态权限) | 允许该应用读取您的视频收藏。 |
ohos.permission.MICROPHONE | user_grant(动态权限) | 此应用可随时使用麦克风进行录音。 |
ohos.permission.WRITE_MEDIA | user_grant(动态权限) | 允许该应用写入您的音乐收藏。 |
ohos.permission.DISTRIBUTED_DATASYNC | user_grant(动态权限) | 管控分布式数据传输能力。 |
ohos.permission.DISTRIBUTED_VIRTUALDEVICE | user_grant(动态权限) | 允许应用使用分布式虚拟能力 |
说明:
静态权限指应用安装时由系统授予的权限,对应于权限敏感级别的system_grant。动态权限指应用在运行过程中需要用户授权的权限,对应于权限敏感级别的user_grant。
不同应用模型的应用配置文件不同,FA模型为config.json,Stage模型为module.json5。
应用权限是软件用来访问系统资源和使用系统能力的一种通行方式。在涉及用户隐私相关功能和数据的场景,例如:访问个人设备的硬件特性,如摄像头、麦克风,以及读写媒体文件等,OpenHarmony通过应用权限管理组件来保护这些数据以及能力。
在系统应用开发过程中,如果应用要使用敏感权限,开发者可以调用应用权限管理组件接口检查待访问权限是否被授权,如果未授权,操作不允许。
应用权限管理提供的API接口,当前仅供系统应用和系统服务调用,具体API接口如下。
表2 应用权限管理API接口功能介绍
接口名 | 描述 |
---|---|
int CheckPermission(int uid, const char *permissionName) | 检查指定UID的应用进程是否具有访问系统服务API的权限 |
int CheckSelfPermission(const char *permissionName) | 检查调用者是否具有访问系统服务API的权限 |
int QueryPermission(const char *identifier, PermissionSaved **permissions, int *permNum) | 查询应用申请的所有权限,并检查权限是否被授予 |
int GrantPermission(const char *identifier, const char *permName) | 将指定权限授予应用程序 |
int RevokePermission(const char *identifier, const char *permName) | 收回应用程序的指定权限 |
int GrantRuntimePermission(int uid, const char *permissionName) | 应用运行时动态授予指定权限 |
int RevokeRuntimePermission(int uid, const char *permissionName) | 应用运行时动态撤销指定权限 |
本部分以包管理器的应用权限开发为例进行讲解。开发过程中,首先需要明确涉及的敏感权限,并在config.json中声明该权限,在安装应用程序时,包管理器会调用应用权限管理组件的接口检查该权限是否被授予,若授予,安装流程正常进行,否则安装失败。
在开发过程中,包管理器明确需要安装应用的权限(ohos.permission.INSTALL_BUNDLE),并在config.json中声明该权限; FA模型:需要在config.json中声明权限,示例:
- {
- "module": {
- "package": "ohos.demo.kitframework",
- "deviceType": [
- "phone", "tv","tablet", "car","smartWatch","sportsWatch","smartCamera", "smartVision"
- ],
- "reqPermissions": [{
- "name": "ohos.permission.INSTALL_BUNDLE",
- "reason": "install bundle",
- "usedScene": {
- "ability": [
- "KitFramework"
- ],
- "when": "always"
- }
- },
- {
- "name": "ohos.permission.LISTEN_BUNDLE_CHANGE",
- "reason": "install bundle",
- "usedScene": {
- "ability": [
- "KitFramework"
- ],
- "when": "always"
- }
- },
- {
- "name": "ohos.permission.GET_BUNDLE_INFO",
- "reason": "install bundle",
- "usedScene": {
- "ability": [
- "KitFramework"
- ],
- "when": "always"
- }
- }
- ]
- }
- }
Stage模型:需要在module.json5中声明权限,示例:
- {
- "module": {
- "requestPermissions": [{
- "name": "ohos.permission.INSTALL_BUNDLE",
- "reason": "install bundle",
- "usedScene": {
- "ability": [
- "KitFramework"
- ],
- "when": "always"
- }
- },
- {
- "name": "ohos.permission.LISTEN_BUNDLE_CHANGE",
- "reason": "install bundle",
- "usedScene": {
- "ability": [
- "KitFramework"
- ],
- "when": "always"
- }
- },
- {
- "name": "ohos.permission.GET_BUNDLE_INFO",
- "reason": "install bundle",
- "usedScene": {
- "ability": [
- "KitFramework"
- ],
- "when": "always"
- }
- }]
- }
- }
当包管理器开发应用安装功能接口时,会调用权限管理相关接口检查自身是否具有安装应用程序的权限,例如:以安装应用的权限名"ohos.permission.INSTALL_BUNDLE"作为入参,调用CheckPermission接口检查包管理器是否具有安装应用的权限,如果有权限,安装流程继续执行,否则返回安装失败;
- constexpr static char PERMISSION_INSTALL_BUNDLE[] = "ohos.permission.INSTALL_BUNDLE";
-
- bool Install(const char *hapPath, const InstallParam *installParam, InstallerCallback installerCallback)
- {
- if ((hapPath == nullptr) || (installerCallback == nullptr) || (installParam == nullptr)) {
- HILOG_ERROR(HILOG_MODULE_APP, "BundleManager install failed due to nullptr parameters");
- return false;
- }
- // 检查ohos.permission.INSTALL_BUNDLE权限是否被授予
- if (CheckPermission(0, static_cast<const char *>(PERMISSION_INSTALL_BUNDLE)) != GRANTED) {
- HILOG_ERROR(HILOG_MODULE_APP, "BundleManager install failed due to permission denied");
- return false; // 返回安装失败
- }
- // 安装流程
- ...
- }
有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。
希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料
获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
HarmonOS基础技能
有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
OpenHarmony北向、南向开发环境搭建
获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。