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

Android端如何打开Google Maps应用而非在Webview中打开?

如何在Android设备上直接打开Google Maps应用而非WebView?

我希望在Android设备中打开Google Maps应用,当前使用如下代码实现:

Future<void> openMapApp() async {
    String query = Uri.encodeComponent(adress);
    String googleUrl = 'https://www.google.com/maps/search/?api=1&query=$query';
    if (Platform.isAndroid) {
      try {
        if (await canLaunchUrl(Uri.parse(googleUrl))) {
          await launchUrl(Uri.parse(googleUrl));
        }
      } catch (error, stack) {
        await Sentry.captureException(error, stackTrace: stack);
        throw ("Cannot launch Google map");
      }
    }
}

但该代码会在Webview中打开页面。我明确希望打开Google Maps应用,且设备已安装该应用,请问是否可行?

解决方案

可行,你需要使用Google Maps的应用内协议链接而非Web链接,Android系统会优先唤起已安装的Google Maps应用。

修改后的代码

Future<void> openMapApp() async {
  String query = Uri.encodeComponent(adress);
  // Google Maps应用专属协议链接
  String googleMapsAppUrl = 'geo:0,0?q=$query';
  // 备用Web链接(应用未安装时降级使用)
  String googleWebUrl = 'https://www.google.com/maps/search/?api=1&query=$query';

  if (Platform.isAndroid) {
    try {
      // 尝试唤起Google Maps应用
      if (await canLaunchUrl(Uri.parse(googleMapsAppUrl))) {
        await launchUrl(
          Uri.parse(googleMapsAppUrl),
          // 强制启动外部应用,避免WebView打开
          mode: LaunchMode.externalApplication,
        );
      } else {
        // 应用未安装时打开Web页面
        await launchUrl(Uri.parse(googleWebUrl));
      }
    } catch (error, stack) {
      await Sentry.captureException(error, stackTrace: stack);
      throw ("Cannot launch Google map");
    }
  }
}

关键修改说明

  • 使用geo:协议:这是Google Maps应用识别的专属协议,系统会直接唤起对应应用
  • 设置LaunchMode.externalApplication:明确要求启动外部独立应用,避免在应用内WebView或浏览器打开
  • 保留Web链接降级方案:确保在Google Maps未安装的场景下,仍能正常打开地图页面

内容的提问来源于stack exchange,提问作者Karol Wiśniewski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:37:38