android 許可權庫EasyPermissions

daqianmen發表於2021-09-09

眾所周知,在android 6.0之後,如果應用程式需要危險許可權,則使用者必須明確嚮應用授予該許可權。今天推薦一個許可權相關的庫EasyPermissions。

以相機許可權來看,先看下不使用庫的情況下的授權方式。
透過ContextCompat.checkSelfPermission() 去判斷有沒有許可權的,沒有ActivityCompat.requestPermissions()去請求許可權,有的話則直接呼叫拍照的

private void requestPermission() {    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {        //許可權判斷,沒有就去請求所需許可權,傳參 需要申請的許可權(可以多個), requestCode請求碼用於結果回撥裡判斷
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_CODE);
    }else {        //有許可權直接拍照,6.0以下的手機拍照走這裡
        takePhoto();
    }
}private void takePhoto(){
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivity(intent);
}

呼叫requestPermissions() 方法後需要在Activity中重寫onRequestPermissionsResult() 來獲取回撥結果。

@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {    super.onRequestPermissionsResult(requestCode, permissions, grantResults);    if (PERMISSIONS_REQUEST_CODE == requestCode) {        for (int x : grantResults) {            if (x == PackageManager.PERMISSION_DENIED) {                //許可權拒絕了
                return;
            }
        }
        takePhoto();
    }
}
使用EasyPermissions 來請求許可權

依舊以拍照舉例
同樣需要在重寫onRequestPermissionsResult(),這裡就直接將請求結果傳遞EasyPermission 來處理。

@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}

EasyPermissions.hasPermissions(Context context,String... perms) 用於檢查許可權是否授權,第二個引數可傳多個許可權值。

EasyPermissions.requestPermissions(context,String rationale,int requestCode,String... perms) 用於請求許可權,rationale 是提示文字,requestCode 請求碼,最後是多個許可權值。

這裡使用了@AfterPermissionGranted註解。

@AfterPermissionGranted(PERMISSIONS_REQUEST_CODE)private void requestPermission(){
    String[] perms = {Manifest.permission.CAMERA};    //許可權判斷,第一次彈出系統的授權提示框
    if (EasyPermissions.hasPermissions(this, perms)) {        //@AfterPermissionGranted 有許可權直接執行 todo...
    }else {        //沒有許可權的話,先提示,點確定後彈出系統的授權提示框
        EasyPermissions.requestPermissions(this, "拍照過程需要用到相機許可權",
                PERMISSIONS_REQUEST_CODE, perms);
    }
}

EasyPermissions 庫提供了許可權請求的回撥,activity實現 EasyPermissions.PermissionCallbacks重寫兩個方法回撥。

/**
 * 允許許可權成功後觸發
 */@Overridepublic void onPermissionsGranted(int requestCode, List<String> perms) {
}/**
 * 禁止許可權後觸發
 */@Overridepublic void onPermissionsDenied(int requestCode, List<String> perms) {    if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {        //在許可權彈窗中,使用者勾選了'不在提示'且拒絕許可權的情況觸發,可以進行相關提示。
    }
}

使用@AfterPermissionGranted註解,當許可權請求被使用者允許後,會根據requestCode來直接執行許可權允許後的程式碼。

...if (EasyPermissions.hasPermissions(this, perms)) {    //加了@AfterPermissionGranted,授權成功後偶直接執行裡面程式碼}
...



作者:程式猿tx
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1727/viewspace-2821644/,如需轉載,請註明出處,否則將追究法律責任。

相關文章