解决安卓6.0拨打电话时的权限问题

前言:为什么在安卓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,动态获取权限并设置的实现到这里就实现了,有空各位可以去慕课网或者其他网

站对手机权限的解释了解了解!!!














               









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值