Android6.0之运行时权限

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37292229/article/details/72358136

Google I/O 2015大会如约已于2015年5月28日举行。在发布会上代号为“Marshmallow(棉花糖)”的安卓6.0系统正式推出。

Android 6.0进一步强化应用权限管理,应用权限管理也成为系统级的功能。比如应用使用位置、相机、通信录需要提示用户允许使用这些权限。

Android 6.0系统默认targetSdkVersion版本小于23的应用授予所有的申请权限,所以如果app设置的targetSdkVersion小于23,不需要设置运行时权限。

    /**
     * 打电话,之前先检测是否开启CALL_PHONE权限,如果开启,直接调用打电话功能;
     * 没有开启,需要提示用户开启权限
     */
    private void callPhone() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, PERMISSIONS_REQUEST_CALL_PHONE);
        } else {
            call();
        }
    }


@SuppressLint("MissingPermission")
    private void call() {
        Intent intent = new Intent(Intent.ACTION_CALL);
        Uri data = Uri.parse("tel:" + "10086");
        intent.setData(data);
        startActivity(intent);
    }


   弹框提示用户开启权限,点击拒绝或者同意,会回调onRequestPermissionsResult方法。

第一次我们拒绝了,下次会有不在询问的选项,如果用户选择了不再询问,那么

shouldShowRequestPermissionRationale方法会返回false。那么我们用户一直拒绝使用权限,则功能不能使用。我们需要显示一个dialog,提示用户开启权限。所
    /**
     *弹框提示用户开启权限,点击拒绝或者同意,会回调onRequestPermissionsResult方法。
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PERMISSIONS_REQUEST_CALL_PHONE) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                call();
            } else {
                if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)) {
                    AlertDialog.Builder dialog = new AlertDialog.Builder(this);
                    dialog.setMessage("请开启播打电话权限")
                            .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {

                                }
                            });
                    dialog.show();

                }
                Toast.makeText(CallPhoneActivity.this, "权限被拒绝", Toast.LENGTH_SHORT).show();
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_37292229/article/details/72358136