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




