安卓10定位权限问题

2021-03-18  本文已影响0人  不会弹钢琴de大叔

由于项目中使用了定位权限(如果你需要后台定位,可以看看此文章,如果不需要后台定位,但是出现了这种情况,那么你将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定位权限的问题了!
希望对你有所帮助谢谢!

上一篇下一篇

猜你喜欢

热点阅读