You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
注册

Android新手求助:定位代码权限报错,已加Manifest权限仍无法解决

解决Google Maps获取位置的权限报错问题

嘿,作为Android新手碰到这个权限问题太正常啦!你遇到的报错核心原因是Android 6.0(API 23)及以上版本对危险权限新增了运行时申请要求——哪怕你在Manifest里声明了权限,也得在代码里主动向用户发起请求,等用户同意后才能调用定位相关的API。

我给你一步步拆解解决方案:

1. 先确认Manifest权限配置

先确保你在AndroidManifest.xml里正确声明了定位权限(二选一即可,FINE精度更高):

<!-- 精确位置权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 粗略位置权限(可选) -->
<!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> -->

2. 添加运行时权限申请逻辑

你需要在调用getCurrentLocation()之前,先检查权限是否已被用户授予,如果没有就发起申请:

第一步:检查并请求权限

在你的Activity/Fragment里添加以下代码:

// 自定义权限请求码,随便给个整数标识就行
private static final int LOCATION_PERMISSION_REQUEST_CODE = 1001;

private void checkLocationPermission() {
    // 检查是否已授予定位权限
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        // 未授予权限,向用户发起申请
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                LOCATION_PERMISSION_REQUEST_CODE);
    } else {
        // 已授予权限,直接执行获取位置的逻辑
        getCurrentLocation();
    }
}

第二步:处理权限申请结果

重写onRequestPermissionsResult方法,根据用户的选择执行对应逻辑:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 用户同意权限,调用获取位置方法
            getCurrentLocation();
        } else {
            // 用户拒绝权限,可弹提示告知功能受限
            Toast.makeText(this, "需要开启定位权限才能获取当前位置", Toast.LENGTH_SHORT).show();
        }
    }
}

第三步:调整调用逻辑

以后不要直接调用getCurrentLocation()了,改成调用checkLocationPermission(),让它先处理权限校验流程。

3. 额外小提醒

另外提一句,你用的FusedLocationApi已经被官方废弃啦,现在推荐用FusedLocationProviderClient,用法更简洁也更稳定。如果之后有时间可以升级一下,不过先解决当前的权限问题更要紧~

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

火山引擎 最新活动