鴻蒙開源三方組件(soul-permission)--權限檢查、請求
1. 介紹
soul-permission是一個權限組件,主要對權限的檢查及請求。方法級權限適配、解耦FractionAbility和Fraction、不再需要Context、不再需要onPermissionResult,支持特殊權限(Notification[通知]、SystemAlert[應用懸浮窗]、UNKNOW_SOURCE[未知來源應用安裝]、
WRITE_SYS_SETTINGS[寫入系統(tǒng)設置])的檢查與請求。
2. 效果展示
3. 依賴
(1). 在工程的build.gradle的allprojects中,添加HAR所在的Maven倉地址
- repositories {
- maven {
- url 'https://s01.oss.sonatype.org/content/repositories/releases/'
- }
- }
(2). 在應用模塊的build.gradle的dependencies閉包中,添加如下代碼:
- dependencies {
- implementation 'io.github.dzsf:soul-permission:1.0.0'
- }
4. 使用說明
(1). 一句話版本完成自動判斷、權限檢查、請求、后續(xù)操作:
- SoulPermission.getInstance().checkAndRequestPermission(SystemPermission.LOCATION,
- //if you want do noting or no need all the callbacks you may use SimplePermissionAdapter instead
- new CheckRequestPermissionListener() {
- @Override
- public void onPermissionOk(Permission permission) {
- Utils.showMessage(ApiGuideAbility.this, permission.toString() + "\n is ok , you can do your operations");
- }
- @Override
- public void onPermissionDenied(Permission permission) {
- Utils.showMessage(ApiGuideAbility.this, permission.toString() + " \n is refused , you can not do next things");
- }
- });
(2). 也可以一次請求多項權限
- SoulPermission.getInstance().checkAndRequestPermissions(
- Permissions.build(SystemPermission.CAMERA, SystemPermission.WRITE_USER_STORAGE),
- //if you want do noting or no need all the callbacks you may use SimplePermissionsAdapter instead
- new CheckRequestPermissionsListener() {
- @Override
- public void onAllPermissionOk(Permission[] allPermissions) {
- Utils.showMessage(ApiGuideAbility.this, allPermissions.length + "permissions is ok" + " \n you can do your operations");
- }
- @Override
- public void onPermissionDenied(Permission[] refusedPermissions) {
- Utils.showMessage(ApiGuideAbility.this, refusedPermissions[0].toString() + " \n is refused , you can not do next things");
- }
- });
(3). 包含shouldShowRequestPermissionRationale的情形
- SoulPermission.getInstance().checkAndRequestPermission(SystemPermission.READ_CONTACTS,
- new CheckRequestPermissionListener() {
- @Override
- public void onPermissionOk(Permission permission) {
- Utils.showMessage(ApiGuideAbility.this, permission.toString() + "\n is ok , you can do your operations");
- }
- @Override
- public void onPermissionDenied(Permission permission) {
- // see CheckPermissionWithRationaleAdapter
- if (permission.shouldRationale()) {
- Utils.showMessage(ApiGuideAbility.this, permission.toString() + " \n you should show a explain for user then retry ");
- } else {
- Utils.showMessage(ApiGuideAbility.this, permission.toString() + " \n is refused , you can not do next things");
- }
- }
- });
(4). 檢查某項權限
- //you can also use checkPermissions() for a series of permissions
- Permission checkResult = SoulPermission.getInstance().checkSinglePermission(SystemPermission.LOCATION);
(5). 檢查特殊權限[通知權限]
- boolean checkResult = SoulPermission.getInstance().checkSpecialPermission(Special.NOTIFICATION);
(6). 檢查并請求特殊權限[未知應用安裝]
- //if you want do noting or no need all the callbacks you may use SimpleSpecialPermissionAdapter instead
- SoulPermission.getInstance().checkAndRequestPermission(Special.UNKNOWN_APP_SOURCES, new SpecialPermissionListener() {
- @Override
- public void onGranted(Special permission) {
- Utils.showMessage(ApiGuideAbility.this, "install unKnown app is enable now ");
- }
- @Override
- public void onDenied(Special permission) {
- Utils.showMessage(ApiGuideAbility.this, "install unKnown app is disable yet");
- }
- });
(7). 跳轉(zhuǎn)到應用設置頁
- SoulPermission.getInstance().goApplicationSettings(data -> {
- //if you need to know when back from app detail
- Utils.showMessage(ApiGuideAbility.this, "back from go appDetail");
- });
(8). 注意事項:
- SoulPermission內(nèi)部使用contentProvider自動初始化,
- 如果你項目中使用了通過替換Application方式從而可能會導致SoulPermission內(nèi)部初始化失敗的框架(如Tinker,騰訊樂固等),
- 請手動在你的Application類中調(diào)用init即可(通過設置debug,可以看到錯誤日志打印和相關Toast)。
- // invoke init in your application when auto init failed
- public class MyApplication extends AbilityPackage {
- @Override
- public void onInitialize() {
- super.onInitialize();
- SoulPermission.setDebug(true);
- }
- }
5. 相關資料
IDE官方下載地址:https://developer.harmonyos.com/cn/develop/deveco-studio