这两天在写APP的时候,发现最新版本(targetSdkVersion 23)编写的代码,明明在AndroidManifest中请求了相关权限,但是在编写调用相关服务的代码时,却发现要你用代码主动做权限检查,不然会抛出SecurityException。
为什么会有这样的权限检查要求呢?这就是新版本的安全机制。当APP安装时,默认请求的权限是关闭的,需要用代码触发用户去同意获取这些权限。
在以前的版本中,我们可以发现这样的请求在APP安装时是全部获取了的。
那么我们怎样用代码去获取这些权限呢。
private void checkPermission(){
int hasWriteContactsPermission = ContextCompat.checkSelfPermission(TargetUserListActivity.this,Manifest.permission.CALL_PHONE);
if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
if(!ActivityCompat.shouldShowRequestPermissionRationale(TargetUserListActivity.this, Manifest.permission.CALL_PHONE)) {
ActivityCompat.requestPermissions(TargetUserListActivity.this, new String[] {Manifest.permission.CALL_PHONE},REQUEST_CODE_ASK_PERMISSIONS);
}
}
这个函数用于请求ContextCompat是V4兼容包的方法,其实Activity的checkSelfPermission和requestPermissions也是用来做权限检查的,但是只能应用于SDK 23,所以并不适用于需要兼容23以下版本的APP。
网友评论