許可權請求框架
阿新 • • 發佈:2018-12-20
整合步驟
dependencies {
implementation 'com.hjq:xxpermissions:5.2'
}
一句程式碼搞定許可權請求,從未如此簡單
XXPermissions.with(this) //.constantRequest() //可設定被拒絕後繼續申請,直到使用者授權或者永久拒絕 //.permission(Permission.SYSTEM_ALERT_WINDOW, Permission.REQUEST_INSTALL_PACKAGES) //支援請求6.0懸浮窗許可權8.0請求安裝許可權 .permission(Permission.Group.STORAGE, Permission.Group.CALENDAR) //不指定許可權則自動獲取清單中的危險許可權 .request(new OnPermission() { @Override public void hasPermission(List<String> granted, boolean isAll) { } @Override public void noPermission(List<String> denied, boolean quick) { } });
是否有這個許可權
if (XXPermissions.isHasPermission(this, Permission.Group.STORAGE)) {
}
跳轉到設定頁面
XXPermissions.gotoPermissionSettings(this);
框架亮點
-
簡潔易用,採用鏈式呼叫的方式,使用只需一句程式碼
-
支援單個許可權、多個許可權、單個許可權組、多個許可權組請求
-
不指定許可權則自動獲取清單檔案上的危險許可權進行申請
-
如果動態申請的許可權沒有在清單檔案中註冊會丟擲異常
-
支援大部分國產手機直接跳轉到具體的許可權設定頁面
-
可設定被拒絕後繼續申請,直到使用者授權或者永久拒絕
-
支援請求6.0及以上的懸浮窗許可權和8.0及以上的安裝許可權
-
本框架不依賴AppCompatSupport庫,相容Eclipse和Studio
常見問題
我們都知道,如果使用者全部授予只會呼叫hasPermission方法,如果使用者全部拒絕只會呼叫noPermission方法。
但是還有一種情況,如果在請求多種許可權的情況下,這些許可權不是被全部授予或者全部拒絕了,而是部分授權部分拒絕這種情況,框架會如何處理回撥呢?
框架會先呼叫noPermission方法,再呼叫hasPermission方法。其中我們可以通過hasPermission方法中的isAll引數來判斷許可權是否全部授予了。如果想知道回撥中的某個許可權是否被授權或者拒絕,可以呼叫List集合類中的contains(Permission.XXX)方法來判斷這個集合中是否包含了這個許可權。