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

    文章

    1529

    浏览量

    71626
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2601

    浏览量

    65266
  • HarmonyOS
    +关注

    关注

    79

    文章

    1817

    浏览量

    29258

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    广汽传祺与华为举行鸿蒙合作签约仪式,正式加入华为鸿蒙生态!

    3月15日,广汽传祺与华为举行鸿蒙合作签约仪式,正式加入华为鸿蒙生态,成为首批加入鸿蒙生态的汽车品牌之一,双方基于HarmonyOS NEXT鸿蒙星河版启动车机
    的头像 发表于 03-17 10:24 304次阅读

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

    ://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

    未来从事鸿蒙开发?是否会有前景?

    鸿蒙的未来发展肯定很有前景的,鸿蒙作为新出的国产操作系统。它不仅只是手机操作系统,鸿蒙的出发点就是万物互联。包含原生应用开发、车载、智能设备、数码、智能家居家电等等。如此大的市场分布,
    发表于 02-19 21:31

    鸿蒙开发者预览版如何?

    在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 376次阅读
    使用 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 321次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>教程

    java后端能转鸿蒙app开发

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

    现在加入鸿蒙开发咋样

    现在加入鸿蒙开发咋样? 各位前辈, 现在加入鸿蒙开发还有前景吗?
    发表于 01-29 18:07

    鸿蒙Harmony是如何影响Android工程师的呢?

    迅猛,目前已经有包括社交、金融、影音、游戏、资讯、食品等多个领域的企业以及开发者加入到鸿蒙的生态建设中,可以说是从日常工作生活的各个领域全面展开。 为什么会影响Android开发工程师? 因为自从华为
    发表于 01-14 22:14

    京东与华为鸿蒙合作 京东启动鸿蒙原生应用开发

     1月10日,华为和京东宣布正式合作,共同推动鸿蒙原生应用的开发,进一步完善鸿蒙生态系统。
    的头像 发表于 01-11 16:22 488次阅读

    华为鸿蒙系统

    华为鸿蒙系统(HUAWEI Harmony OS),是华为公司在2019年8月9日于东莞举行的华为开发者大会(HDC.2019)上正式发布的操作系统。 华为鸿蒙系统是一款全新的面向全场景的分布式
    发表于 11-02 19:39

    鸿蒙 OS 应用开发初体验

    的操作系统平台和开发框架。HarmonyOS 的目标是实现跨设备的无缝协同和高性能。 DevEco Studio 对标 Android Studio,开发鸿蒙 OS 应用的 IDE。
    发表于 11-02 19:38