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"/>

更多相关文章

  1. android打电话和发短信
  2. 分享Android(安卓)KTX + Kotlin协程 组合使用
  3. Android(安卓)USB 开发详解
  4. 有关Android调用服务全解析
  5. Android下获取Root权限和设置目录属性
  6. Android—— 4.2 Vold挂载管理_mmcblk内置-双sdcard (八)
  7. Android(安卓)NullPointerException解决方法
  8. Android(安卓)安全机制概述 Permission
  9. 理解Android(安卓)上的安全性

随机推荐

  1. 记录博客“参考网站”专栏源码
  2. Android(安卓)装载器---启动装载器
  3. Android(安卓)sendevent/getevent 用法
  4. Android(安卓)ART 的初始化和启动
  5. IDS打包系统包修改
  6. Android的配置
  7. android animation中interpolator参数详
  8. AndroidX设计架构MVVM之DataBinding+View
  9. JSONObject与JSONArray的使用 jsonobject
  10. Android中Gallery 点击图片放大