1. 程式人生 > >動態獲取許可權

動態獲取許可權

首先申請許可權:

 List<String> permissionList = new ArrayList<>();


        /**
         * 允許程式獲取網路資訊狀態,如當前的網路連線是否有效
         * */
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) {
            permissionList.add(Manifest.permission.INTERNET);
        }
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            permissionList.add(Manifest.permission.ACCESS_COARSE_LOCATION);
        }
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
        }


        if (permissionList.size() != 0) {  //申請的集合不為空時,表示有需要申請的許可權
            ActivityCompat.requestPermissions(this, permissionList.toArray(new String[permissionList.size()]), 1);
        } else { //所有的許可權都已經授權過了
            findview();
        }

申請許可權的回撥

 
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1:

                if (grantResults.length > 0) { //安全寫法,如果小於0,肯定會出錯了
                    for (int i = 0; i < grantResults.length; i++) {
                        int grantResult = grantResults[i];
                        if (grantResult == PackageManager.PERMISSION_DENIED) { //這個是許可權拒絕
                            String s = permissions[i];
                            Toast.makeText(this, s + "許可權被拒絕了", Toast.LENGTH_SHORT).show();
                            initJurisdiction();
                        } else { //授權成功了
                            findview();
                        }
                    }
                }
                break;
            default:
                break;

        }
    }