前言:为什么在安卓6.0之后,有些权限无法像之前那样去获取了,
在安卓6.0之前当你的手机上安装一个app的应用之后,
它会自动为你配置一些权限,那么这样的话问题就来了,
权限的配置并非我们想的那样一个一个的去为我们配置的,
而是一组一组的配置,具体如何一组的配置,
大家可以参考一下慕课网里面的教程,
这里的话我就不给地址了!
于是,
在安卓6.0之后全下便需要我们自动去获取了!!
安卓6.0之前的写法:
在xml里面对权限进行设置:CAll_PHONE:
<!--添加打电话的权限-->
<uses-permission android:name="android.permission.CALL_PHONE"/>
然后如下在activity里面或者是在fragment里面:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
//url:统一资源定位符
//uri:统一资源标示符(更广)
intent.setData(Uri.parse("tel:" +"18798004918"));
//开启系统拨号器
startActivity(intent);
安卓6.0之后就有问题了,如果这样子设置了的话,startActivity便会报错。
所以
// 检查是否获得了权限(Android6.0运行时权限)
if (ContextCompat.checkSelfPermission(AboutusActivty.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){
// 没有获得授权,申请授权
if (ActivityCompat.shouldShowRequestPermissionRationale(AboutusActivty.this,Manifest.permission.CALL_PHONE)) {
// 返回值:
//如果app之前请求过该权限,被用户拒绝, 这个方法就会返回true.
//如果用户之前拒绝权限的时候勾选了对话框中”Don’t ask again”的选项,那么这个方法会返回false.
//如果设备策略禁止应用拥有这条权限, 这个方法也返回false.
// 弹窗需要解释为何需要该权限,再次请求授权
Toast.makeText(AboutusActivty.this, "请授权!", Toast.LENGTH_LONG).show();
// 帮跳转到该应用的设置界面,让用户手动授权
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
}
else
{
// 不需要解释为何需要该权限,直接请求授权
ActivityCompat.requestPermissions(AboutusActivty.this,new String[]{Manifest.permission.CALL_PHONE},MY_PERMISSIONS_REQUEST_CALL_PHONE);
}
}
else
{
// 已经获得授权,可以打电话
CallPhone();
}
/*
* 申请完权限之后拨打电话
*
* */
private void CallPhone()
{
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
//url:统一资源定位符
//uri:统一资源标示符(更广)
intent.setData(Uri.parse("tel:" +"18798004918"));
//开启系统拨号器
startActivity(intent);
}
这是我们需要做的,网上有部分方法是直接获取权限,
没有理会客户,这并不科学,同时这里需要注意的是:
如果用户设置的是拒绝而且不再询问的话,就有问题了,
因为这样的话,
用户在用当前app或其他app时就不得不去手机设置对手机的权限进行设置才可以了。
OK,动态获取权限并设置的实现到这里就实现了,有空各位可以去慕课网或者其他网
站对手机权限的解释了解了解!!!