关于Android6.0的相关权限,网上已经有很多优秀的资料,我就不再废话了,主要在申请权限的时有以下需要注意的地方:
若用户勾选了不再提示的选择框之后,是不会再弹出系统的权限申请提示框,这就麻烦了,此时我们需要提示用户去设置里为app开启相应的权限。具体做法:在onRequestPermissionsResult() 方法中判断用户拒绝权限后shouldShowRequestPermissionRationale()的值,该值若为false,则表示用户勾选了不再提示,此时,我们可以进行相应的提示。
关于shouldShowRequestPermissionRationale():
从字面意思可以看出,这个方法是告诉我们是否应该向用户解释我们申请该权限的原因,即告诉用户我们为什么要申请该权限。在app第一次安装的时候。这个方法会返回false,因此你可以直接请求任何需要的权限。如果用户以前拒绝了一个请求,这个方法将返回true,表示你应该向用户解释了。那样的话你应该考虑在再次触发权限对话框之前显示一个解释请求用途之类的信息。此后,如果用户一直点击拒绝,则该值一直为true。
最终,当app完全没有机会被授权的时候,即用户选中了不再显示的复选框之后,shouldShowRequestPermissionRationale() 则返回false,这里的意思很明显,用户都已经勾选不再显示了,你也就不需要再解释了。
然而,我们便可以利用这个方法的返回值进行判断用户是否拒绝并勾选不再显示,当用户拒绝并勾选不再提示后,则我们可以在onRequestPermissionsResult()方法中判断用户拒绝权限后该值是否为false,如果为false,那么表示用户拒绝了权限并勾选不再显示。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults[0] == PackageManager.PERMISSION_DENIED){
if (ActivityCompat.shouldShowRequestPermissionRationale(this,permissions[0])){
// 用户拒绝,并勾选了 不再显示
}
}
}