android - 为不同的版本做权限判断(check permission)
访问量: 3298
参考: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; } } }