由于项目中使用了定位权限(如果你需要后台定位,可以看看此文章,如果不需要后台定位,但是出现了这种情况,那么你将ACCESS_BACKGROUND_LOCATION权限去除不申请即可),然后在安卓10以上的机器发现选择了 仅在使用期间允许 后,代码中也是出现了拒绝权限的回调,
之前没有时间研究,最近有时间研究了一下,需要对需要的人有所帮助。
话不多说直接上代码
以下代码是用来判断是否有当前权限的(包括了选择仅在使用中这种情况)
private boolean checkHasPermission(List<String> mPermissions) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
// DANGER ZONE!!! Changing this will break the library.
return true;
}
//是否是定位权限判断
boolean isLocation = false;
int failCount = 0;
for (String perm : mPermissions) {
if (Manifest.permission.ACCESS_BACKGROUND_LOCATION.equals(perm)) {
isLocation = true;
}
if (ContextCompat.checkSelfPermission(this, perm) != PackageManager.PERMISSION_GRANTED) {
++failCount;
}
}
if (isLocation) {
//定位权限的判断
//当点击仅在使用中允许 或 全部允许 失败数量为1 , 0 但是这两种是都可以成功定位的
return failCount <= 1;
} else {
//没有安卓10的定位权限
return failCount == 0;
}
}
接下来在初次使用的时候,也会出现权限拒绝的情况,那么可以在onRequestPermissionsResult方法中使用以下代码
if (perms.size() == 1 && perms.contains(Manifest.permission.ACCESS_BACKGROUND_LOCATION)) {
//这个就是认为有定位权限了,当然如果你需要后台定位这个需要你继续提示用户
} else {
//还是没有权限,需要提示用户开启权限
}
经过以上两步就可以实现安卓10定位权限的问题了!
希望对你有所帮助谢谢!
网友评论