android中开启打电话的动态权限.,6.0打电话动态权限代码设置

6.0权限设置

(模拟打电话权限申请与调试)

加入权限

初始化 RxPermissions

private final int CALL_PHONE_CODE = 1;

RxPermissions rxPermissions = new RxPermissions(this);

判断当前设备的版本号(版本兼容适配,通过代码适配方式去适配)

if(Build.VERSION.SDK_INT >= Build.VERSION_CODE.M){

//检验是否拥有以下权限

if(ContextCompat.checkSelfPermission(this,,Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){

//未获得权限

//请求权限,调用请求权限方法,会弹出系统授权窗口

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE},CALL_PHONE_CODE);

}else{

//已授权

Toast.makeText(this,"已授权",Toast.LENGTH_LONG).show();

callPhone();

}

}

拨打电话逻辑

private void callPhone() {

Intent intent = new Intent(Intent.ACTION_CALL);

Uri data = Uri.parse("tel:" + "xxxxxxxxxxx");

intent.setData(data);

startActivity(intent);

}

适配回调

/**

* 权限适配回调方法

* @param requestCode 请求码

* @param permissions 权限数组

* @param grantResults 申请权限结果

*/

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if (CALL_PHONE_CODE==requestCode){//拨打电话

if(grantResults.length>0&&grantResults[0]!=PackageManager.PERMISSION_GRANTED){//拒绝了

//隐患,可能会崩溃

//引导用户去开启(1.再申请一遍权限系统窗口 2.引导手动开启)

Toast.makeText(this,"用户点击决绝",Toast.LENGTH_LONG).show();

//是否点击不再询问的选择按钮

if (!ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.CALL_PHONE)){

gotoPerssionSettinng();

}else{

//只点击拒绝,,不勾选不再询问,再次请求权限

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE},CALL_PHONE_CODE);

}

}else{//通过,,直接拨打

Toast.makeText(this,"用户点击允许",Toast.LENGTH_LONG).show();

callPhone();

}

}

}

指引跳转到设置页面

private void gotoPerssionSettinng() {

new AlertDialog.Builder(this).setTitle("权限").setMessage("如果没有权限问题")

.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

gotoPerssionSettinng();//跳转到权限设置页面,让用户手动开启

}

}).show();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值