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

毕业设计获取当前经纬度时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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:45:27