You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android已声明定位权限调用fusedLocationClient仍报权限缺失如何解决

问题解决方案

1. 缺少权限申请结果回调处理

你当前仅在onCreate里触发了权限申请,但是ActivityCompat.requestPermissions是异步调用,你触发申请后直接return终止了后续逻辑,没有处理用户同意权限后的回调逻辑,定位相关的初始化代码始终没有被执行。需要在MainActivity中重写onRequestPermissionsResult方法,确认用户授予所有所需权限后再执行定位相关调用:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1) {
        boolean allGranted = true;
        for (int result : grantResults) {
            if (result != PackageManager.PERMISSION_GRANTED) {
                allGranted = false;
                break;
            }
        }
        if (allGranted) {
            // 在这里执行定位初始化、调用定位请求的逻辑
        } else {
            // 处理权限被拒绝的场景,比如提示用户权限为功能必需
        }
    }
}

2. 调用定位方法处缺少显式权限判断

Android Studio的Lint静态检查只会校验调用风险方法的上下文有没有权限判断,不会跨文件检查你之前有没有申请过权限。你在独立Java文件中调用requestLocationUpdates时没有包裹权限判断逻辑,所以会触发红色波浪线报错。
你需要在调用该方法前增加权限校验逻辑:

if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
    && ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    fusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.getMainLooper());
}

3. 高版本系统权限适配遗漏

如果你的targetSdkVersion >= 29(Android 10),且应用需要在后台运行时获取定位,需要在AndroidManifest.xml中额外添加权限:

<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

同时动态申请时也要把这个权限加入申请列表。
如果targetSdkVersion >= 31(Android 12),使用精确定位时需要确保用户主动授予ACCESS_FINE_LOCATION权限,系统默认不会自动授予精确定位权限。

4. 冗余代码问题

你当前的MainActivity中重复定义了两次checkAndRequestPermissions方法,需要删除多余的重复定义,避免编译异常。

内容的提问来源于stack exchange,提问作者user15155006

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:54:03