现有还是如果了解我们的6.0的动态权限我在简书上有以篇有过简绍;
我们这样我们就可以来现现我们的我们的 6.0的动态权限的封装我们可以继承我们的BaseActivity的基类,在基类中我们的可以做逻辑操作。
一 、我们可以把我们的权限放在一个类中我们,如果要使用我们就调用类中的常量就可以使用了
public class Constants {
public static final int CALL_PHONE = 14;
public static final int WEITE_EXTERNAL_STORAGE= 28;
}
1.为子类提供一个权限检查的方法
2.String... Permission 表示不定参数,,也就是调用者放发的时候我们可以传入多个String的对象这是(JDK5的新特性)
public boolean hasPermission (String... permission){
for(String permissi : permission){
if(ContextCompat.checkSelfPermission(this,permissi)!= PackageManager.PERMISSION_GRANTED){
return true;
}
}
return false;
}
3.为子类提供一个权限申请的方法
public void request(int code , String... persissions){
ActivityCompat.requestPermissions(this,persissions,code);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
//打电话权限的回调处理
case Constants.CALL_PHONE:
//判断打电话申请权限是否成功,成功就执行打电话的逻辑
//注意:因为集合里只有一个权限申请,所以参数为0代表打电话权限
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
docallphone();
}else{
//用户拒绝就提示
Toast.makeText(this,"权限没有授予",Toast.LENGTH_LONG).show();
}
break;
//SD卡权限的回调处理
case Constants.WEITE_EXTERNAL_STORAGE:
//判断打电话申请权限是否成功,成功就执行打电话的逻辑
//注意:因为集合里只有一个权限申请,所以参数为0代表打电话权限
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
dosdcardPermission();
}else {
Toast.makeText(this,"权限,没有授予",Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
}
5.
暴露给子类实现打电话业务逻辑的方法,子类如果有此功能,覆写此方法即可,不用再管权限的配置
子类没有此功能,就不用管此方法
/**
* 暴露给子类实现打电话业务逻辑的方法,子类如果有此功能,覆写此方法即可,不用再管权限的配置
* 子类没有此功能,就不用管此方法
*/
public void docallphone(){};
/**
* 暴露给子类实现往SD写入数据业务逻辑的方法,子类如果有此功能,覆写此方法即可,不用再管权限的配置
* 子类没有此功能,就不用管此方法
*/
public void dosdcardPermission(){};
6. 回到MainActivity中我们就开始实现子类的权限的方法
hasPermission :是我BaseActivitiy 的提供权限检查的方法(参数就是我们在清单文件的权限)
返回为true 可以请求动态权限。返回为flase 就要授予
private void callphone() {
if(hasPermission(Manifest.permission.CALL_PHONE)){
request(Constants.CALL_PHONE,Manifest.permission.CALL_PHONE);
}else{
docallphone();
}
}
7.拨打电话的方法
@SuppressLint("MissingPermission")
public void docallphone(){
//执行打电话到10086的操作
Intent intent = new Intent(Intent.ACTION_CALL);
Uri parse = Uri.parse("tel:" + "1008611");
intent.setData(parse);
//使用AS,这里会报红,编译能通过,只是提醒你要做Android6.0权限的适配
startActivity(intent);
}