0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙APP开发鸿蒙权限请求框架

OpenHarmony技术社区 来源:鸿蒙技术社区 作者:软通夏德旺 2021-09-28 09:19 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

关于 HarmonyOS 的动态授权的常规操作流程和代码我之前写过一篇文章:《鸿蒙动态权限申请完整规范流程和操作详解》。

文章地址如下:

https://harmonyos.51cto.com/posts/5165

权限控制是在进行 HarmonyOS 应用开发中非常重要的一个环节,几乎所有的商业应用中都会涉及到。

我们在曾经使用的 Android app 应用中经常会遇到一些 app 会弹出各种敏感权限授权窗口提示用户授权。

有些 app(特别是流氓应用)经常会在第一次打开 app 的时候就提醒用户授予所有需要的权限。

甚至一些权限跟 app 功能根本不相关(比如读取通讯录等),如果不授权则直接不让你使用该 app,我遇到这类流氓应用一般果断卸载。

而真正的开发过程中我们在权限申请的时候一般要遵循以下 3 个原则:

最小权限集,即应用中确实需要的权限才进行申请。

需要用到 XX 权限时才进行申请,即并不是 app 开始的时候一次性申请所有权限,而是需要用到 XX 特定功能必须要授权才能使用的时候(比如调用照相机),这个时候才申请该特定权限。

未获取用户授权的话依然能使用应用大部分功能,只是必须授权的功能无法使用。

下面我针对敏感权限申请更好的复用,编写了一个第三方开源组件,取名为 XdwPermissionsLib。

具体项目源码请见:

https://gitee.com/xdw1019/XdwPermissionsLib

XdwPermissionsLib 介绍

鸿蒙权限请求框架,提供一个符合正规权限调用流程的框架并基于链式调用(这里简称 strong 模式),同时提供一个并不推荐使用的简单权限框架(简称 lazy 模式)。

strong 模式:正式项目推荐使用该模式。正规权限处理流程,用户需要检验权限并且处理校验结果的回调。

lazy 模式:该模式下开发者几乎不用去编写请求权限的代码,特别是不处理回调。

该模式不推荐在正式项目中使用,可以用于平时编写某些 demo 又不想处理权限的场景下。

当然有些 app 不在乎用户体验,只要不授权就不让使用的情况可以使用该模式。

动态申请权限流程图如下:

使用说明

①Strong 模式

引用:

方式一:通过 mylibrary 模块生成 har 包,添加 har 包到 libs 文件夹内

方式二:maven 引入(待后续上传到 maven 中心仓库再支持)

定义权限组,比如:

//定义需要动态申请的权限组,可以是一个或多个权限。这里的权限还必须要在config.json中进行配置

private String[] permissions = {

// 存储权限

SystemPermission.WRITE_USER_STORAGE,

// 相机权限

SystemPermission.CAMERA

};

在需要触发权限申请的地方调用如下代码:

//开始动态申请权限,链式调用。//实际开发中申请权限的动作应该放到需要用到该权限的操作中触发,比如点击某个按钮调起相机 StrongPermissionsUtils.getInstance(this).checkPermissions(this,permissions).setPermissionStateListener(new StrongPermissionsUtils.PermissionStateListener() {

@Override

public void onPermissionGranted() {

//授权成功之后的回调

//此处根据自己的实际业务编写业务逻辑,此处用toast进行演示

ToastUtil.toast(getContext(),“授权成功”);

}

@Override

public void onPermissionDenied(boolean isDisabledPrompt) {

//授权拒绝之后的回调

//此处根据自己的实际业务编写业务逻辑,此处用toast进行演示

if(isDisabledPrompt){

ToastUtil.toast(getContext(),“您之前拒绝了授权并且禁止系统再提示,需要手动进入系统设置页面开启”);

}else{

ToastUtil.toast(getContext(),“您拒绝了授权”);

}

}

});

在当前的 ability 重写 onRequestPermissionsFromUserResult 方法,代码如下:

@Overridepublic void onRequestPermissionsFromUserResult(int requestCode, String[] permissions, int[] grantResults) {

super.onRequestPermissionsFromUserResult(requestCode, permissions, grantResults);

//鉴权之后的回调,必须调用

StrongPermissionsUtils.getInstance(this).onRequestPermissionsResult(requestCode, permissions, grantResults);

}

②Lazy 模式

引用:

方式一:通过 mylibrary 模块生成 har 包,添加 har 包到 libs 文件夹内

方式二:maven 引入(待后续上传到 maven 中心仓库再支持)

将需要调用的 Ability 继承 LazyPermissionAblity,如下:

public class MainAbility extends LazyPermissionAblity {

在当前 Ability 中定义权限组,并且在 onStart 方法的第一行调用 setPermissions 方法。

代码如下:

public class MainAbility extends LazyPermissionAblity {

//定义需要动态申请的权限组,可以是一个或多个权限。这里的权限还必须要在config.json中进行配置

private String[] permissions = {

// 存储权限

SystemPermission.WRITE_USER_STORAGE,

// 相机权限

SystemPermission.CAMERA

};

@Override

public void onStart(Intent intent) {

//lazy模式下,setPermissions的代码调用必须放在onStart的第一行

super.setPermissions(permissions);

super.onStart(intent);

super.setMainRoute(MainAbilitySlice.class.getName());

}

}

工程结构说明

工程中总共有三个 module,分别为:

mylibrary:自定义的第三方权限库,供外部项目调用。

entry:用来演示 mylibrary 库中 strong 模式下的权限调用。

LazySample:用来演示 mylibrary 库中 lazy 模式下的权限调用。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • APP
    APP
    +关注

    关注

    33

    文章

    1596

    浏览量

    76195
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2642

    浏览量

    70241
  • HarmonyOS
    +关注

    关注

    80

    文章

    2157

    浏览量

    36408

原文标题:鸿蒙APP开发:权限控制详解!

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    鸿蒙生态·星光学堂鸿蒙应用开发者培训第1期(长沙)成功举办!政企协同共育鸿蒙人才,助力区域数字产业

    1月9日,鸿蒙生态·星光学堂——鸿蒙应用开发者培训第1期在长沙经开区正式开班。本次培训在长沙经开区管委会党建工作局的指导下,由鸿蒙生态(长沙)创新中心主办,
    的头像 发表于 01-12 18:03 637次阅读
    <b class='flag-5'>鸿蒙</b>生态·星光学堂<b class='flag-5'>鸿蒙</b>应用<b class='flag-5'>开发</b>者培训第1期(长沙)成功举办!政企协同共育<b class='flag-5'>鸿蒙</b>人才,助力区域数字产业

    SC-3568HA:解锁鸿蒙权限API与分布式能力的工业控制平台

    传统嵌入式开发面临硬件碎片化、高权限功能缺失、分布式协同复杂及自动化测试不足等痛点。SC-3568HA开发板基于鸿蒙系统,通过统一内核抽象层和硬件驱动
    的头像 发表于 12-18 11:27 7774次阅读
    SC-3568HA:解锁<b class='flag-5'>鸿蒙</b>全<b class='flag-5'>权限</b>API与分布式能力的工业控制平台

    想体验鸿蒙生态,该怎么获取鸿蒙开发板?有哪些途径?

    如何快速上手体验鸿蒙生态? 想体验鸿蒙生态,该怎么获取鸿蒙开发板?有哪些途径?
    发表于 11-29 08:40

    如何申请鸿蒙开发板?想体验鸿蒙生态。

    如何申请鸿蒙开发板?想体验鸿蒙生态。
    发表于 11-29 08:34

    开源鸿蒙技术大会2025丨跨平台开发框架分论坛:共拓移动开发新边界,共创跨平台生态新时代

    随着开源鸿蒙生态的持续壮大,开发者迎来了除Android与iOS之外的“第三种选择”。为解决“加入一个新生态就会增加一倍投入”的行业痛点,让开发者的代码能够在更多平台上复用,开源鸿蒙
    的头像 发表于 11-20 17:31 1257次阅读
    开源<b class='flag-5'>鸿蒙</b>技术大会2025丨跨平台<b class='flag-5'>开发</b><b class='flag-5'>框架</b>分论坛:共拓移动<b class='flag-5'>开发</b>新边界,共创跨平台生态新时代

    开源鸿蒙技术大会2025丨开源鸿蒙应用开发再提速,跨平台框架PMC(筹)正式启动孵化

    9月27日,开源鸿蒙技术大会2025在长沙国际会议中心盛大举办。大会现场,开源鸿蒙跨平台框架PMC(筹)正式启动孵化,标志着开源鸿蒙在应用开发
    的头像 发表于 11-10 18:15 1671次阅读
    开源<b class='flag-5'>鸿蒙</b>技术大会2025丨开源<b class='flag-5'>鸿蒙</b>应用<b class='flag-5'>开发</b>再提速,跨平台<b class='flag-5'>框架</b>PMC(筹)正式启动孵化

    开源鸿蒙MNN AI应用开发与MNN移植经验

    本期内容由AI Model SIG提供,介绍了在开源鸿蒙中,利用MNN开源框架开发AI应用以及基于MNN源码编译与Har包封装的方法。
    的头像 发表于 09-04 11:31 5248次阅读
    开源<b class='flag-5'>鸿蒙</b>MNN AI应用<b class='flag-5'>开发</b>与MNN移植经验

    知乎开源“智能预渲染框架” 几行代码实现鸿蒙应用页面“秒开”

    近日,知乎在Gitee平台开源了其自研的鸿蒙“智能预渲染框架”,并将该框架的Har包上架到OpenHarmony三方库中心仓。该框架鸿蒙
    的头像 发表于 08-29 14:32 773次阅读
    知乎开源“智能预渲染<b class='flag-5'>框架</b>” 几行代码实现<b class='flag-5'>鸿蒙</b>应用页面“秒开”

    【HarmonyOS 5】鸿蒙mPaaS详解

    【HarmonyOS 5】鸿蒙mPaaS详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、mPaaS是什么? mPaaS 是 Mobi
    的头像 发表于 07-11 18:23 1094次阅读
    【HarmonyOS 5】<b class='flag-5'>鸿蒙</b>mPaaS详解

    【HarmonyOS 5】金融应用开发鸿蒙组件实践

    【HarmonyOS 5】金融应用开发鸿蒙组件实践 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财#
    的头像 发表于 07-11 18:20 1204次阅读
    【HarmonyOS 5】金融应用<b class='flag-5'>开发</b><b class='flag-5'>鸿蒙</b>组件实践

    中软国际正式启动鸿蒙软件工场

    自2024年HarmonyOS NEXT版本起,HarmonyOS应用框架层更新为鸿蒙“单框架”,正式告别了对Android应用框架、内核的依赖。2025年,
    的头像 发表于 06-17 15:44 1207次阅读

    鸿蒙5开发宝藏案例分享---性能体验设计

    (loadNonCriticalRes) }) } } 分段加载技巧 : 首屏元素≤15个 图片使用WebP格式 避免启动时网络请求 结语:流畅是设计出来的! 看完这些案例是不是发现鸿蒙的性能优化其实有
    发表于 06-12 16:45

    使用DevEcoStudio 开发、编译鸿蒙 NEXT_APP 以及使用中文插件

    # 使用DevEcoStudio 开发、编译鸿蒙 NEXT_APP 以及使用中文插件 #鸿蒙开发工具 #DevEco Studio ##
    发表于 06-11 17:18

    鸿蒙5开发宝藏案例分享---自由流转的拖拽多屏联动

    ? 【干货预警】鸿蒙开发宝藏案例大揭秘!手把手教你玩转常用功能**?** 大家好呀~,今天在扒拉鸿蒙文档的时候,突然发现官方竟然藏了一堆超实用的开发案例! ?** 之前总觉得
    发表于 06-03 18:50

    鸿蒙5开发宝藏案例分享---一多开发实例(地图导航)

    ? 鸿蒙开发隐藏宝藏大公开!手把手教你玩转\"一多\"地图导航案例 ? 大家好呀!我是你们的老朋友,今天要给大家扒一扒鸿蒙官方文档里那些\"藏得深\"的实战
    发表于 06-03 16:17