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

Flutter使用url_launcher调用Google Maps/Waze导航时出现net::ERR_UNKNOWN_URL_SCHEME错误的求助

解决url_launcher打开Google Maps/Waze时net::ERR_UNKNOWN_URL_SCHEME错误

我完全懂你碰到的这个问题——通过浏览器中转唤起地图应用时触发的URL scheme错误,本质是因为你当前用的是HTTP/HTTPS链接,而直接唤起原生地图应用需要使用它们专属的自定义URL scheme,浏览器没法正确解析这些非标准协议,所以才抛出了net::ERR_UNKNOWN_URL_SCHEME。下面给你分步解决的方案:

1. 替换为地图应用的自定义URL Scheme

放弃用HTTPS链接中转,直接使用各应用的原生scheme,这样就能跳过浏览器,直接唤起对应地图应用:

修改你的launchMaps函数

void launchMaps(double latitude, double longitude) async {
  final selectedMap = getSelectedMap();
  String mapUrl;

  if (selectedMap == "waze") {
    // Waze原生唤起链接
    mapUrl = 'waze://?ll=$latitude,$longitude&navigate=yes';
  } else if (selectedMap == "google") {
    // Google Maps原生唤起链接(Android)
    mapUrl = 'googlemaps://?saddr=My+Location&daddr=$latitude,$longitude';
  } else {
    // 默认 fallback到网页版
    mapUrl = 'https://maps.google.com?saddr=My+Location&daddr=$latitude,$longitude';
  }

  // 先检查是否能打开该scheme(即应用是否已安装)
  if (await canLaunchUrl(Uri.parse(mapUrl))) {
    // 用externalApplication模式确保唤起原生应用
    await launchUrl(Uri.parse(mapUrl), mode: LaunchMode.externalApplication);
  } else {
    // 如果应用未安装,跳转网页版
    String fallbackUrl = selectedMap == "waze" 
        ? 'https://waze.com/ul?ll=$latitude,$longitude&navigate=yes'
        : 'https://maps.google.com?saddr=My+Location&daddr=$latitude,$longitude';
    await launchUrl(Uri.parse(fallbackUrl));
  }
}

2. 配置Android包可见性(Android 11+必备)

从Android 11开始,系统限制了应用对其他应用的访问权限,你必须在AndroidManifest.xml里声明要唤起的地图应用包名,否则会唤起失败:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <!-- 其他现有配置 -->

  <queries>
    <!-- 声明Google Maps包名 -->
    <package android:name="com.google.android.apps.maps" />
    <!-- 声明Waze包名 -->
    <package android:name="com.waze" />
  </queries>
</manifest>

3. (可选)iOS端配置

如果你的应用需要支持iOS,还需要在Info.plist里添加允许查询的URL schemes:

<key>LSApplicationQueriesSchemes</key>
<array>
  <string>waze</string>
  <string>comgooglemaps</string>
</array>

为什么之前的方式会报错?

当你打开HTTPS的地图链接时,浏览器的「在应用内继续」提示,本质是尝试通过地图应用的自定义scheme唤起App,但你的应用没有预先声明对这些scheme的访问权限(Android 11+的包可见性限制),导致系统无法识别这个scheme,最终抛出错误。直接使用原生scheme并配置好权限,就能绕过浏览器中转,直接唤起地图应用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:02:46