成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HarmonyOS自定義權限組件--你真的弄懂了權限控制了嗎?

系統 OpenHarmony
鴻蒙權限請求框架,提供一個符合正規權限調用流程的框架并基于鏈式調用(這里簡稱strong模式),同時提供一個并不推薦使用的簡單權限框架(簡稱lazy模式)。

[[424081]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

前言

關于HarmonyOS的動態授權的常規操作流程和代碼我之前寫過一篇文章,請看《鴻蒙動態權限申請完整規范流程和操作詳解(https://harmonyos.51cto.com/posts/5165)》。

權限控制是在進行HarmonyOS應用開發中非常重要的一個環節,幾乎所有的商業應用中都會涉及到。我們在曾經使用的Android app應用中經常會遇到一些app會彈出各種敏感權限授權窗口提示用戶授權,有些app(特別是流氓應用)經常會在第一次打開app的時候就提醒用戶授予所有需要的權限,甚至一些權限跟app功能根本不相關(比如讀取通訊錄等),如果不授權則直接不讓你使用該app,我遇到這類流氓應用一般果斷卸載。而真正的開發過程中我們在權限申請的時候一般要遵循以下3個原則:

1、最小權限集,即應用中確實需要的權限才進行申請。

2、需要用到XX權限時才進行申請,即并不是app開始的時候一次性申請所有權限,而是需要用到XX特定功能必須要授權才能使用的時候(比如調用照相機),這個時候才申請該特定權限。

3、未獲取用戶授權的話依然能使用應用大部分功能,只是必須授權的功能無法使用。

下面我針對敏感權限申請更好的復用,編寫了一個第三方開源組件,取名為XdwPermissionsLib。

具體項目源碼請見https://gitee.com/xdw1019/XdwPermissionsLib

XdwPermissionsLib

介紹

鴻蒙權限請求框架,提供一個符合正規權限調用流程的框架并基于鏈式調用(這里簡稱strong模式),同時提供一個并不推薦使用的簡單權限框架(簡稱lazy模式)。

strong模式:正式項目推薦使用該模式。正規權限處理流程,用戶需要檢驗權限并且處理校驗結果的回調。

lazy模式:該模式下開發者幾乎不用去編寫請求權限的代碼,特別是不處理回調。該模式不推薦在正式項目中使用,可以用于平時編寫某些demo又不想處理權限的場景下。當然有些app不在乎用戶體驗,只要不授權就不讓使用的情況可以使用該模式。

動態申請權限流程圖

運行效果圖展示:

Strong模式下的效果圖:

圖片待補充

lazy模式下的效果圖:

圖片待補充

使用說明

Strong模式:

1.引用

方式一: 通過mylibrary模塊生成har包,添加har包到libs文件夾內

方式二:maven引入(待后續上傳到maven中心倉庫再支持)

2.定義權限組,比如:

  1. //定義需要動態申請的權限組,可以是一個或多個權限。這里的權限還必須要在config.json中進行配置 
  2.    private String[] permissions = { 
  3.            // 存儲權限 
  4.            SystemPermission.WRITE_USER_STORAGE, 
  5.            // 相機權限 
  6.            SystemPermission.CAMERA 
  7.    }; 

 3.在需要觸發權限申請的地方調用如下代碼:

  1. //開始動態申請權限,鏈式調用。 
  2. //實際開發中申請權限的動作應該放到需要用到該權限的操作中觸發,比如點擊某個按鈕調起相機    StrongPermissionsUtils.getInstance(this).checkPermissions(this,permissions).setPermissionStateListener(new StrongPermissionsUtils.PermissionStateListener() { 
  3.             @Override 
  4.             public void onPermissionGranted() { 
  5.                 //授權成功之后的回調 
  6.                 //此處根據自己的實際業務編寫業務邏輯,此處用toast進行演示 
  7.                 ToastUtil.toast(getContext(),"授權成功"); 
  8.             } 
  9.  
  10.             @Override 
  11.             public void onPermissionDenied(boolean isDisabledPrompt) { 
  12.                 //授權拒絕之后的回調 
  13.                 //此處根據自己的實際業務編寫業務邏輯,此處用toast進行演示 
  14.                 if(isDisabledPrompt){ 
  15.                     ToastUtil.toast(getContext(),"您之前拒絕了授權并且禁止系統再提示,需要手動進入系統設置頁面開啟"); 
  16.                 }else
  17.                     ToastUtil.toast(getContext(),"您拒絕了授權"); 
  18.                 } 
  19.             } 
  20.         }); 

4.在當前的ability重寫onRequestPermissionsFromUserResult方法,代碼如下:

  1. @Override 
  2. public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions, int[] grantResults) { 
  3.         super.onRequestPermissionsFromUserResult(requestCode, permissions, grantResults); 
  4.         //鑒權之后的回調,必須調用 
  5.         StrongPermissionsUtils.getInstance(this).onRequestPermissionsResult(requestCode, permissions, grantResults); 
  6.     } 

Lazy模式:

1.引用

方式一: 通過mylibrary模塊生成har包,添加har包到libs文件夾內

方式二:maven引入(待后續上傳到maven中心倉庫再支持)

2、將需要調用的Ability繼承LazyPermissionAblity,如下:

  1. public class MainAbility extends LazyPermissionAblity { 

3、在當前Ability中定義權限組,并且在onStart方法的第一行調用setPermissions方法,如下:

  1. public class MainAbility extends LazyPermissionAblity { 
  2.     //定義需要動態申請的權限組,可以是一個或多個權限。這里的權限還必須要在config.json中進行配置 
  3.     private String[] permissions = { 
  4.             // 存儲權限 
  5.             SystemPermission.WRITE_USER_STORAGE, 
  6.             // 相機權限 
  7.             SystemPermission.CAMERA 
  8.     }; 
  9.     @Override 
  10.     public void onStart(Intent intent) { 
  11.         //lazy模式下,setPermissions的代碼調用必須放在onStart的第一行 
  12.         super.setPermissions(permissions); 
  13.         super.onStart(intent); 
  14.         super.setMainRoute(MainAbilitySlice.class.getName()); 
  15.     } 

工程結構說明

工程中總共有三個module,分別為mylibrary、entry和LazySample。

mylibrary: 自定義的第三方權限庫,供外部項目調用。

entry: 用來演示mylibrary庫中strong模式下的權限調用。

LazySample: 用來演示mylibrary庫中lazy模式下的權限調用。

文章相關附件可以點擊下面的原文鏈接前往下載

https://harmonyos.51cto.com/resource/1195

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2018-10-20 16:05:12

iOSAPP開發

2022-07-27 08:01:29

CMS垃圾回收器

2022-04-07 08:20:22

typeinterface前端

2022-03-08 15:01:48

負載均衡IP服務器

2022-02-17 07:10:39

Nest自定義注解

2023-02-20 15:20:43

啟動頁組件鴻蒙

2022-05-06 09:21:21

TypeScriptinterfacetype

2017-02-14 12:34:28

iOSAllocInit

2022-04-24 15:17:56

鴻蒙操作系統

2022-10-26 15:54:46

canvas組件鴻蒙

2022-10-25 15:12:24

自定義組件鴻蒙

2025-03-13 07:33:46

Spring項目開發

2022-02-21 15:16:30

HarmonyOS鴻蒙操作系統

2022-06-20 15:43:45

switch開關鴻蒙

2021-12-21 15:22:22

鴻蒙HarmonyOS應用

2022-06-27 08:16:34

JSON格式序列化

2018-01-05 10:47:59

前端JavascriptWeb

2021-10-10 20:36:49

Android Root權限

2013-12-26 09:44:30

互聯網物聯網區別

2013-07-15 16:55:45

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99tv| 欧美电影一区 | 一区二区视频在线观看 | 无码一区二区三区视频 | 精品久久久久久亚洲国产800 | 国产精品一区二区三区四区 | 国产乱一区二区三区视频 | 欧美精品一区二区三区在线 | 欧美精品中文 | 黑色丝袜三级在线播放 | 伊人激情综合网 | 久久91视频| 欧美一区不卡 | 国产午夜精品视频 | 久久无毛| 青青草原综合久久大伊人精品 | 日韩色在线 | 久草精品视频 | 毛片片| 欧美视频二区 | 黄色一级大片在线免费看产 | 日日夜夜狠狠操 | 亚洲视频在线观看 | 久久久视频在线 | 在线播放国产一区二区三区 | 日韩欧美一区二区三区免费观看 | 国产欧美精品一区二区三区 | 作爱视频免费看 | 免费激情网站 | 欧美日韩成人 | 91精品观看 | 日韩成人一区二区 | 天天干天天插天天 | 欧美婷婷| 日韩国产精品一区二区三区 | 亚洲欧美成人影院 | 久久久久久久国产精品影院 | av在线播放不卡 | 成人在线精品视频 | 日韩久久久久 | 欧美最猛性xxxxx亚洲精品 |