随着android6.0的更新,最大的变化莫过于新的权限控制规则。以前可以直接通过AndroidManifest配置需要的权限。而更新后,为了保证用户隐私的安全性,部分私密权限需要动态的设置,仅仅在AndroidManifest中配置已经完全不能满足需求了。
当然为了达到兼容,项目使用的SDK如果是在23之前(即6.0之前)那么会依照之前的规则直接在AndroidManifest中设置即可。而当SDK升级到6.0后,例如录音、相册、定位等私密信息,就需要按照新的规则动态的申请权限。
本文提供一个权限管理类来使开发者能够快速在6.0中配置好自己需要的权限。
使用:
使用之前需要将三个类拷入项目中,它们分别是:Permissions、PermissionsManager、PermissionsResultAction。之后需要在申请权限的地方配置它们。
private void requestPermissions() {
if (!PermissionsManager.getInstance().hasAllPermissions(this, new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,//写入权限
Manifest.permission.CALL_PHONE,//电话拨打权限
Manifest.permission.READ_PHONE_STATE,
})) ;
PermissionsManager.getInstance().requestPermissionsIfNecessaryForResult(this,
new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CALL_PHONE,
Manifest.permission.READ_PHONE_STATE,
}, new PermissionsResultAction() {
@Override
public void onGranted() {
// TODO Auto-generated method stub
showLogInfo("权限添加成功");
}
@Override
public void onDenied(String permission) {
// TODO Auto-generated method stub
showLogError("用户拒绝添加权限---" + permission);
}
});
}
@Override
public void onRequestPermissionsResult(int permsRequestCode,
String[] permissions, int[] grantResults) {
PermissionsManager.getInstance().
notifyPermissionsChange(permissions, grantResults);
}
注意:
即便通过如此设置了权限,仍然需要在AndroidManifest中进行配置,这一部分是必不可少的。