关于android开发中权限permission的声明

关于android开发中权限permission的声明

一、静态权限的声明:
在android sdk<23时,我们在开发过程中只需要在AndroidManifest.xml中静态声明一下权限就可以
例如:允许访问网络权限:

监听系统开机广播权限:

但是,当android sdk>=23后。对于权限的处理就不仅仅只需要静态的在AndroidManifest.xml中声明了

二、动态声明权限的例子:
1、依然需要在AndroidManifest.xml中静态声明权限


    
    
    
    
    
    
    
    
    2、在Activity的onCreat方法中,或者在需要用到权限的地方

initView();//调用权限的动态申请

public void initView(){//先判断有无权限,如果没有,则进行权限的申请
if(checkPermission(Manifest.permission.INTERNET,
Manifest.permission.RECEIVE_BOOT_COMPLETED,
Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)){
        }else{//若没有权限,则进行申请requestPermission(Manifest.permission.INTERNET,
        Manifest.permission.RECEIVE_BOOT_COMPLETED,
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }
    }

public boolean checkPermission(String... permissions) {//判断是否拥有权限
        for(String permission:permissions){
            if(ContextCompat.checkSelfPermission(this,permission)!=PackageManager.PERMISSION_GRANTED){
                return false;
            }
        }
        return true;
    }

 public void requestPermission(String... permissions){//请求权限,后面的int值是请求权限时对应回调方法onRequestPermissionsResult的返回码
        ActivityCompat.requestPermissions(this,permissions,4);
    }
@Override//请求权限的回调
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case 4:
                if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                    finish();//代表没有请求到权限
                }
                break;
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

你可能感兴趣的:(android相关)