android - 为不同的版本做权限判断(check permission)
2017-09-02 14:56
访问量: 2300
分类:
技术
在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;
}
}
}