毕业设计获取当前经纬度时checkPermission()函数异常求助
解决checkPermission()函数异常导致无法获取经纬度的问题
常见问题排查与修复步骤:
1. 确认权限已在AndroidManifest.xml中声明
获取位置必须声明对应权限,否则checkPermission会始终返回拒绝:<!-- 基础前台位置权限(二选一或都加) --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- Android 10+ 后台位置权限(仅当需要后台获取位置时添加) --> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" android:maxSdkVersion="33" />2. 修正checkPermission()的调用逻辑
确保传入正确的上下文和权限常量,并且完整处理权限状态:// 定义权限请求码(自定义常量) private static final int REQUEST_LOCATION_PERMISSION = 1001; // 检查权限并处理 private void checkLocationPermission() { int fineLocPerm = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION); if (fineLocPerm != PackageManager.PERMISSION_GRANTED) { // 未授予权限,发起请求 ActivityCompat.requestPermissions( this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION_PERMISSION ); } else { // 权限已授予,执行获取经纬度操作 fetchCurrentLocation(); } }3. 实现权限请求回调
必须重写回调方法处理用户的权限选择结果:@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_LOCATION_PERMISSION) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { fetchCurrentLocation(); } else { // 用户拒绝权限,可弹出提示引导开启 Toast.makeText(this, "未授予位置权限,无法获取经纬度", Toast.LENGTH_SHORT).show(); } } }4. 适配Android 11+的后台权限规则
若需后台获取位置,Android 11及以上版本需单独请求后台权限,且必须先获取前台权限:private void checkBackgroundLocationPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { int bgPerm = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION); if (bgPerm != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions( this, new String[]{Manifest.permission.ACCESS_BACKGROUND_LOCATION}, 1002 // 自定义后台权限请求码 ); } } }
内容的提问来源于stack exchange,提问作者AStudent
相关产品推荐
相关产品推荐

