從根本解決Android6.0權限檢測問題 附demo

耐心讀完,理解權限處理的關鍵點。最後附有源碼~~
這裏寫圖片描述
一、背景:
android6.0系統開啓了敏感權限用戶授權功能。如果開發的APP中不添加權限獲取申請,默認是不會彈框提示用戶授權的,如此以來系統默認禁止使用拍照、存儲等敏感權限,如果開發者設置targetSdkVersion >=23而APP中直接調用拍照或存儲時就會導致崩潰。解決辦法targetSdkVersion <23或者代碼中添加權限檢測。

二、編寫目的:
目前網上查找6.0系統權限解決辦法雜亂無章,單單通過直接調用requestPermissions和checkSelfPermission無法根本解決。最關鍵的是需要判斷用戶拒絕授權並勾選“不再提示”的情況。特此編寫此文,避免大家把時間浪費在已有的輪子上。

三、問題分析:
6.0+系統默認禁止拍照、存儲等敏感權限,需要開發者代碼中做權限檢測判斷處理。權限狀態判斷處理有三種狀態:
1、權限默認被禁止
2、權限被用戶拒絕授權並勾選“不再提示”——勾選不再提示後調用checkSelfPermission方法後系統不會彈出授權提示框,所以這種情況下需要重點處理,也是核心點。手動彈框提示用戶實現功能需要該權限。
3、權限授權成功。

四、解決辦法:

 //***********測試敏感權限申請***************
    private void requestMyPermission() {
        String[] arr_permision = new String[]{
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.CAMERA};
        //根據列出的權限分次獲取敏感權限
        EasyPermission.with(this).code(AppContants.REQUEST_CODE).permissions(arr_permision).request();
    }

    //必須複寫此處的回調,否則無法獲取用戶授權結果
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        EasyPermission.handleResult(this, requestCode, permissions, grantResults);//處理權限申請回調結果
    }

//授權結果回調
    @Override
    public void onBasicPermissionSuccess() {
        Toast.makeText(this, "授權成功", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onBasicPermissionFailed() {
        Toast.makeText(this, "授權失敗", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onBasicPermissionFailedNeedRational() {
        Toast.makeText(this, "授權失敗並被勾選不再提示,此時引導用戶去應用設置中手動授權", Toast.LENGTH_SHORT).show();

        //最好以對話框形式引導
        AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).setTitle("請前往應用授權設置中添加授權").setPositiveButton("去授權", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                Uri uri = Uri.fromParts("package", MainActivity.this.getPackageName(), null);
                intent.setData(uri);
                startActivityForResult(intent, 001);
            }
        }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

            }
        }).show();

    }
    /*********END 權限申請***************/

直接上代碼,自己看,親測有效~~
下載地址:http://download.csdn.net/download/u011084603/10003095
Github地址:https://github.com/hellozp/permissionCheck

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