6.0新增API
ContextCompat.checkSelfPermission:检测一个app是否具有哪些权限
如果没有呢,我们就会调用第二个方法去申请权限
ActivityCompat.requestPermissions()
申请权限是一个异步的过程,我们这时候就要用第三个方法回调去执行处理结果,在这个返回结果中去判断用户是否给我们了授权,
@Override onRequestPermissionsResult();
1》当然我们需要在AndroidManifest中添加我们的所有权限(不可省)
2》申请授权,
3》申请回调,
先贴上下载连接
第一个连接的demo用的是自己封装的方法,第二个用PermissionGen这个Jar
http://download.csdn.net/detail/qq_33413264/9704618
http://download.csdn.net/detail/qq_33413264/9704628
一.
没有用jar的动态权限申请
把方法写在BaseActivity中,方便调用
/**
* 为子类提供一个权限检查方法
*/
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,
@NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case Constant.CALL_PHONE_CODE:
doCallPhone();
break;
}
}
/**
* 默认的打电话权限处理
*/
public void doCallPhone() {
}
在MainActivity中进行动态权限判断
private void callPhone() {
if(hasPermission(Manifest.permission.CALL_PHONE)){
doCallPhone();
}else {
requestPermission(Constant.CALL_PHONE_CODE,Manifest.permission.CALL_PHONE);
}
详情见代码
二:用PermissionGen jar
在gradle中添加jar包
compile ‘com.lovedise:permissiongen:0.0.6’
用Jar动态申请权限
private void callPhone() {
//动态添加权限,用PermissionGen 的Jar
PermissionGen.needPermission(this,100,new String[]{
Manifest.permission.CALL_PHONE
});
}
//判断权限执行的回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
PermissionGen.onRequestPermissionsResult(this,requestCode,permissions,grantResults);
}
//有权限时候执行的方法
@PermissionSuccess(requestCode =100)
public void daCallPhone(){
Intent intent=new Intent(Intent.ACTION_CALL);
Uri data=Uri.parse(“tel:”+”10086”);
intent.setData(data);
this.startActivity(intent);
}
详情请见代码