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

    文章

    1573

    浏览量

    72459
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2634

    浏览量

    66311
  • HarmonyOS
    +关注

    关注

    79

    文章

    1974

    浏览量

    30150

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

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

收藏 人收藏

    评论

    相关推荐

    如何在开源鸿蒙OpenHarmony开启SELinux模式?RK3566鸿蒙开发板演示

    本文介绍开源鸿蒙OpenHarmony系统下,开启/关闭SELinux权限的方法,触觉智能Purple Pi OH鸿蒙开发板演示,已适配全新OpenHarmony5.0 Release
    的头像 发表于 11-18 19:03 315次阅读
    如何在开源<b class='flag-5'>鸿蒙</b>OpenHarmony开启SELinux模式?RK3566<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>板演示

    鸿蒙原生开发手记:01-元服务开发

    简介 元服务是鸿蒙中的一种轻量应用形态,无需下载,直接运行。类似于微信小程序,但与小程序不同的是,元服务更加轻量。 元服务使用原生开发,是系统级提供的,无论从易用性、性能、体验上,都要比小程序好
    发表于 11-14 17:28

    鸿蒙Flutter实战:07混合开发

    参考资料 撰写双端平台代码(插件编写实现) 鸿蒙Flutter功能开发 鸿蒙add-to-app示例 如何使用混合开发 module 【
    发表于 10-23 16:00

    哪吒汽车APP启动鸿蒙原生应用开发

    哪吒汽车正式签约,启动鸿蒙原生应用开发;在5月17日,在上海市经济和信息化委员会指导的“千帆竞发启航 共筑鸿蒙生态——HDD上海站·鸿蒙原生应用专场”活动中哪吒汽车与华为签约启动
    的头像 发表于 05-18 09:48 1163次阅读

    鸿蒙的1万个理由,北京中关村现大幅鸿蒙海报

    。学鸿蒙,可以收获新的技能、更高的薪酬、还有更多荣誉。 据悉,目前已有超过4000个APP启动了鸿蒙原生应用开发,已有23家985高校、46家211高校已开设或即将开设Harmony
    发表于 05-08 20:31

    最新开源代码证实!“鸿蒙原生版”微信正在积极开发

    开放源代码项目等代码, **仅支持鸿蒙内核和鸿蒙系统的应用 ** —— 不再兼容 Android 应用。 既然不再兼容 Android 端 APP,那各大 APP
    发表于 05-08 17:08

    鸿蒙OS开发实例:【HarmonyHttpClient】网络框架

    鸿蒙上使用的Http网络框架,里面包含纯Java实现的HttpNet,类似okhttp使用,支持同步和异步两种请求方式;还有鸿蒙版retrofit,和Android版Retrofit相
    的头像 发表于 04-12 16:58 827次阅读
    <b class='flag-5'>鸿蒙</b>OS<b class='flag-5'>开发</b>实例:【HarmonyHttpClient】网络<b class='flag-5'>框架</b>

    鸿蒙实战项目开发:【短信服务】

    ://gitee.com/openharmony/applications_app_samples.git git pull origin master ​ 最后呢,很多开发朋友不知道需要学习那些鸿蒙技术?
    发表于 03-03 21:29

    学习鸿蒙背后的价值?星河版开放如何学习?

    现在是2024年,华为在1月18开展了鸿蒙千帆起仪式发布会。宣布了鸿蒙星河版,并对开发者开放申请,此次发布会主要是说明了,鸿蒙已经是全栈自研底座,鸿
    发表于 02-22 20:55

    纯血鸿蒙系统,拿什么与安卓、iOS比?

    鸿蒙系统的出现就是来打破这种僵局的,华为鸿蒙是以生态系统为基本而产生的独立系统。如果与Android、iOS系统无异何必浪费时间。生态圈为1+8+N,其中不止是app应用层开发、还有智
    发表于 02-21 21:04

    鸿蒙开发者预览版如何?

    在24年的华为鸿蒙发布会中表示。预览版已经向开发者开放申请,首批支持的机型有三款分别为华为 Mate 60、华为Mate 60 Pro、华为Mate X5。 其HarmonyOS NEXT去除
    发表于 02-17 21:54

    使用 Taro 开发鸿蒙原生应用 —— 快速上手,鸿蒙应用开发指南

    随着鸿蒙系统的不断完善,许多应用厂商都希望将自己的应用移植到鸿蒙平台上。最近,Taro 发布了 v4.0.0-beta.x 版本,支持使用 Taro 快速开发鸿蒙原生应用,也可将现有的
    的头像 发表于 02-02 16:09 863次阅读
    使用 Taro <b class='flag-5'>开发</b><b class='flag-5'>鸿蒙</b>原生应用 —— 快速上手,<b class='flag-5'>鸿蒙</b>应用<b class='flag-5'>开发</b>指南

    鸿蒙开发教程

    去年8 月份华为发布会上,华为发布了HarmonyOS NEXT预览版,宣布不再兼容安卓应用。大家期待的纯血鸿蒙终于要来临了,next 预览版本现在已经开放申请渠道了,Next 开发者预览版本目前只
    的头像 发表于 01-31 17:11 766次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>教程

    鸿蒙开发用什么语言?

    两种开发方向 我们常说鸿蒙开发,但是其实鸿蒙开发分为两个方向: 一个是系统级别的开发,比如驱动,
    的头像 发表于 01-30 16:12 1533次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>用什么语言?

    java后端能转鸿蒙app开发

    java后端转鸿蒙app开发好。 还是前端呢
    发表于 01-29 18:15