Android拨打电话权限总结
16lz
2021-12-04
android在6.0和6.0以上拨打电话的权限声明
/** * 打电话 * * @param phoneNumber */ protected void startCallPhone(String phoneNumber) { this.phoneNuber = phoneNumber; //判断Android版本是否大于23 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int checkCallPhonePermission = ContextCompat.checkSelfPermission(mContext, Manifest.permission.CALL_PHONE); if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, MY_PERMISSIONS_REQUEST_CALL_PHONE); return; } else { callPhone(phoneNumber); } } else { callPhone(phoneNumber); // 检查是否获得了权限(Android6.0运行时权限) if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { // 没有获得授权,申请授权 if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, Manifest.permission.CALL_PHONE)) { // 返回值:// 如果app之前请求过该权限,被用户拒绝, 这个方法就会返回true.// 如果用户之前拒绝权限的时候勾选了对话框中”Don’t ask again”的选项,那么这个方法会返回false.// 如果设备策略禁止应用拥有这条权限, 这个方法也返回false. // 弹窗需要解释为何需要该权限,再次请求授权 TastyToastUtils.newInstance(mContext).ERROR("请授权"); // 帮跳转到该应用的设置界面,让用户手动授权 Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivity(intent); } else { // 不需要解释为何需要该权限,直接请求授权 ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.CALL_PHONE}, MY_PERMISSIONS_REQUEST_CALL_PHONE); } } else { // 已经获得授权,可以打电话 callPhone(phoneNumber); } } } private void callPhone(String phoneNumber) { // 拨号:激活系统的拨号组件 -- 直接拨打电话 //Intent intent = new Intent(); // 意图对象:动作 + 数据 //intent.setAction(Intent.ACTION_CALL); // 设置动作 //Uri data = Uri.parse("tel:" + phoneNumber); // 设置数据 //intent.setData(data); //startActivity(intent); // 激活Activity组件//打开拨号界面,填充输入手机号码,让用户自主的选择 Intent intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:"+phoneNumber)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } // 处理权限申请的回调 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_CALL_PHONE: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 授权成功,继续打电话 callPhone(this.phoneNuber); } else { // 授权失败! TastyToastUtils.newInstance(mContext).ERROR("授权失败"); } break; } } }
注:在清单文件中声明CALL_PHONE权限
<uses-permission android:name="android.permission.CALL_PHONE"/>
更多相关文章
- android打电话和发短信
- 分享Android(安卓)KTX + Kotlin协程 组合使用
- Android(安卓)USB 开发详解
- 有关Android调用服务全解析
- Android下获取Root权限和设置目录属性
- Android—— 4.2 Vold挂载管理_mmcblk内置-双sdcard (八)
- Android(安卓)NullPointerException解决方法
- Android(安卓)安全机制概述 Permission
- 理解Android(安卓)上的安全性