1. 程式人生 > >許可權請求框架

許可權請求框架

整合步驟

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)方法來判斷這個集合中是否包含了這個許可權。