android 權限庫EasyPermissions

文章鏈接:https://mp.weixin.qq.com/s/H63Sn03xV0JoINXB4SWWKA

衆所周知,在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() 來獲取回調結果。

@Override
public 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 來處理。

@Override
public 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重寫兩個方法回調。

/**
 * 允許權限成功後觸發
 */
@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {
}

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

使用@AfterPermissionGranted註解,當權限請求被用戶允許後,會根據requestCode來直接執行權限允許後的代碼。

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

不需要在權限成功回調中再去執行代碼,簡化了流程。
EasyPermissions 庫地址https://github.com/googlesamples/easypermissions

歡迎關注我的個人博客:https://www.manjiexiang.cn/

更多精彩歡迎關注微信號:春風十里不如認識你
一起學習,一起進步,歡迎上車,有問題隨時聯繫,一起解決!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章