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

使用Flutter Location插件获取位置时如何规避Google提示?

问题分析与解决方案

问题根源

这个弹窗并不是你的Flutter应用触发的,而是Google Play Services的Location Services组件自动弹出的。当你的应用请求的定位优先级是「高精度模式」(依赖GPS+网络辅助定位),但系统的「Google Location Accuracy」功能未开启时,Play Services就会弹出这个提示,引导用户开启该功能来提升定位精度——哪怕你已经申请了ACCESS_FINE_LOCATION权限,只要满足这个条件就会触发。

而且这个提示的触发逻辑很“顽固”:只要检测到应用需要网络辅助定位,且当前该功能未开启,就会弹出;哪怕用户之前开启后又手动关闭,再次请求定位时还是会重复出现。

解决方法

要规避这个提示,核心思路是让应用不触发网络辅助定位的需求,也就是强制使用仅GPS的定位模式,这样Play Services就不会认为需要开启「Google Location Accuracy」功能。具体实现步骤如下:

  1. 修改定位优先级为「仅设备模式」
    在调用getLocation()之前,通过location插件的changeSettings()方法,设置定位优先级为仅使用设备GPS(对应Android的PRIORITY_DEVICE_ONLY)。这样应用只会依赖GPS硬件获取位置,不会请求网络辅助,自然就不会弹出那个提示。

    代码修改如下:

    var location = Location();
    
    // 关键:设置仅使用设备GPS定位,不依赖网络辅助
    await location.changeSettings(
      priority: LocationPriority.deviceOnly,
    );
    
    try {
      _currentLocation = await location.getLocation();
    } on PlatformException catch (e) {
      if (e.code == 'PERMISSION_DENIED') {
        _locationMsg = 'Permission denied';
      } else if (e.code == 'LOCATION_UNAVAILABLE') {
        // 没有GPS信号时,返回你想要的「未知位置」提示
        _locationMsg = '未知位置';
      }
      _currentLocation = null;
    }
    
  2. 确保使用最新版location插件
    旧版本的插件可能没有LocationPriority.deviceOnly这个参数,建议你在pubspec.yaml中更新插件到最新版本,保证参数可用。

  3. 备选方案(不推荐)
    如果你坚持想要高精度定位但又不想弹出提示,目前没有官方的配置可以直接禁用这个弹窗。因为这是Play Services的系统级行为,第三方应用无法直接干预。所以最稳妥的还是采用第一种方法,牺牲网络辅助定位来避免打扰用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:19:30