- 新增API
- ContextCompat.checkSelfPermission 检测当前app是否拥有某些权限
- ActivityCompat.requestPermissions() 申请某些权限
- onRequestPermissionResult回调权限申请结果
- ActivityCompat.shouldShowRequestPermissionRetional向用户解释权限的作用
- 使用流程
- 在AndroidManifest中添加需要的权限(不能省略,因为还需要适配6.0以下的系统)
- 检查权限(危险权限,跟用户相关的),一般权限只在清单文件中申请即可
- 申请授权
- 处理申请回调
- (注:如果不想急于适配6.0权限,gradle中targetSdkVersion使用小于23的即可,minSdkVersion和targetSdkVersion会被包含进打包生成的apk中)
- 6.0权限组
- 权限使用的封装 (一般我们的Activity都会继承BaseActivity,然后在里面写一些公共的处理代码,那么我们就可以将其封装在BaseActivity中)
/**
* 为子类提供一个权限检查方法
* @param permissions 所要检查的权限
* @return
*/
public boolean hasPermission(String... permissions){
for (String permission : permissions){
if(ContextCompat.checkSelfPermission(this,permission)
!= PackageManager.PERMISSION_GRANTED){
return false;
}
}
return true;
}
/**
* 为子类提供一个权限请求方法
* @param code 请求码
* @param permissions 所要请求的权限
*/
public void requestPermission(int code,String...permissions){
ActivityCompat.requestPermissions(this,permissions,code);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode){
//根据requestCode做相应处理,可以在项目的常量类中声明一些requestCode,
//在本类中可以提供默认的处理方法,如果子类想分别处理,
// 只需要重写父类的方法即可,毕竟权限组并没有几个
}
}
注:该文章是参考了慕课网的《Android 6.0系统新特性》写的