Android手機動態獲取多個權限請求,附帶拒絕權限時勾選不再請求

獲取請求:

    /**
     * 獲取用戶權限
     */
    private void permissionRequest() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ) {
            String[] permissions = new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,
            	Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.CAMERA, 
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.READ_EXTERNAL_STORAGE};
                
            List<String> mPermissionList = new ArrayList<>();
            for (int i = 0; i < permissions.length; i++) {
                if (ContextCompat.checkSelfPermission(SplashActivity.this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
                    mPermissionList.add(permissions[i]);
                }
            }

            if (mPermissionList.isEmpty()) {// 全部允許
                toMain(); //執行下一步操作
            } else {//存在未允許的權限
                String[] mPermissions = mPermissionList.toArray(new String[mPermissionList.size()]);
                ActivityCompat.requestPermissions(SplashActivity.this, mPermissions, 1001);
            }
        }
    }

用戶操作的響應

   
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1001:
                for (int i = 0; i < grantResults.length; i++) {
//                   如果拒絕獲取權限
                    if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                        //判斷是否勾選禁止後不再詢問
                        boolean flag= ActivityCompat.shouldShowRequestPermissionRationale(SplashActivity.this, permissions[i]);
                        if (flag) {
                            permissionRequest();
                            return;//用戶權限是一個一個的請求的,只要有拒絕,剩下的請求就可以停止,再次請求打開權限了
                        } else { // 勾選不再詢問,並拒絕
                            ToastUtils.showToast(SplashActivity.this, "Please go to Settings to get user permissions"));
                            return;
                        }
                    }
                }
                toMain(); //執行下一步操作
                break;
            default:
                break;
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章