Back

android - 为不同的版本做权限判断(check permission)

发布时间: 2017-09-02 06:56:00

参考:https://developer.android.com/training/permissions/requesting.html?hl=zh-cn

在5.1 (sdk 22)之前, 权限是在一开始安装的时候确定的。

在6.0 (sdk 23)之后, 权限是在运行时检查的。目的是为了简化安装过程。

下面的代码,就可以针对不同的平台做检查。

写在Activity中:

    // 定义这个常量, 用来申请权限的时候 做个记号。 
    private static final int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 3;

    public voic onCreate(...){ 
        // 检查相机权限
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
            Log.d(TAG, "== requestPermissions: ");
            if( ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
        }else{
            Log.d(TAG, "== just show alert");
            // 给出alert
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("请您为“XXX”赋予“相机权限”。打开“设置 -> 一般 -> 安全 -> 应用程序权限, 找到”XX“,然后在“相机”权限打钩")
                    .setTitle(R.string.request_permission_for_camera_title)
                    .setPositiveButton(R.string.got_it, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            finish();
                        }
                    })
                    .setCancelable(false);
            builder.show();
        }




    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){
        switch (requestCode){
            case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                if(grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    Log.d(TAG, "== got permission of camera");
                }else{
                    finish();
                }
                return;
            }
        }
    }

Back