Android判斷APP是否有某一權限

本例判斷是否有錄音權限,主要是checkPermission方法,PackageInfo中可以獲取某個應用的權限清單

PackageManager pm = getPackageManager();  
boolean permission = (PackageManager.PERMISSION_GRANTED ==  
        pm.checkPermission("android.permission.RECORD_AUDIO", "com.lkn.a11509.democollection"));  
if (permission) {  
    Toast.makeText(MainActivity.this,"有錄音權限",Toast.LENGTH_SHORT).show();  
}else {  
    Toast.makeText(MainActivity.this,"木有錄音權限",Toast.LENGTH_SHORT).show();  
}  
  
try {  
    PackageInfo pack = pm.getPackageInfo("com.lkn.a11509.democollection",PackageManager.GET_PERMISSIONS);  
    String[] permissionStrings = pack.requestedPermissions;  
    String permissionReq = "";  
    for (String permissionString : permissionStrings) {  
        permissionReq = permissionReq + permissionString + "\n";  
    }  
    Toast.makeText(MainActivity.this,"權限清單--->" + permissionReq,Toast.LENGTH_SHORT).show();  
} catch (PackageManager.NameNotFoundException e) {  
    e.printStackTrace(); 
}
對於不同的機型,進入該APP權限管理的方法不同
通過Build.MANUFACTURER來判斷,小米和魅族已自測有效,故貼在這裏
                        if (Build.MANUFACTURER.equals("Xiaomi")) {  
                            Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");  
                            ComponentName componentName = new ComponentName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");  
                            intent.setComponent(componentName);  
                            intent.putExtra("extra_pkgname", BuildConfig.APPLICATION_ID);  
                            startActivity(intent);  
                        }else if (Build.MANUFACTURER.equals("Meizu")) {  
                            Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");  
                            intent.addCategory(Intent.CATEGORY_DEFAULT);  
                            intent.putExtra("packageName", BuildConfig.APPLICATION_ID);  
                            startActivity(intent);  
                        }

20170817

更好的權限相關方法

https://github.com/Werb/PermissionsCheckerSample

自己Demo的使用

第一步 compile 'com.werb.permissionschecker:permissionschecker:0.0.1-beta2'

第二步 定義好需要檢查的權限列表,定義PermissionChecker

    static final String[] PERMISSIONS = new String[]{
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.CAMERA,
            Manifest.permission.READ_EXTERNAL_STORAGE
    };
    private PermissionChecker permissionChecker;
第三步 初始化
        permissionChecker = new PermissionChecker(this); // initialize,must need

第四步 處理我們的回調方法

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case PermissionChecker.PERMISSION_REQUEST_CODE:
                if (permissionChecker.hasAllPermissionsGranted(grantResults)) {
                    //此處是我們獲取權限後的業務邏輯
                } else {
                    permissionChecker.showDialog();
                }
                break;
        }
    }

第五步 在我們需要檢查權限的地方

        if (permissionChecker.isLackPermissions(PERMISSIONS)) {
            permissionChecker.requestPermissions();
        } else {
            //檢查是否有權限未被獲取,有則引導去請求獲取,沒有則進行我們獲取到相應權限後的業務邏輯
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章