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

Flutter应用如何加入Google Maps链接打开选项并提取经纬度执行导航操作

Flutter实现监听Google Maps位置链接的完整方案

第一步:配置平台端的Deep Link监听规则

Android端配置

在android/app/src/main/AndroidManifest.xml文件的启动Activity标签内,添加如下intent-filter配置:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data
        android:scheme="https"
        android:host="google.com"
        android:pathPrefix="/maps" />
    <data
        android:scheme="https"
        android:host="www.google.com"
        android:pathPrefix="/maps" />
</intent-filter>

配置完成后,所有以https://google.com/maps、https://www.google.com/maps开头的链接触发打开操作时,你的应用都会出现在系统可选打开列表中。

iOS端配置

  1. 登录苹果开发者后台,为你的应用ID开启Associated Domains能力
  2. 打开Xcode中的Runner项目,进入Signing & Capabilities标签,添加Associated Domains项,新增两个域名配置:
    • applinks:google.com
    • applinks:www.google.com

第二步:正确实现uni_links监听逻辑

多数适配失败的核心原因是遗漏了冷启动场景的处理,按如下方式实现全场景监听:

  1. 在pubspec.yaml中添加依赖:

    dependencies:
      uni_links: ^0.5.1
    

    执行flutter pub get完成依赖安装。

  2. 在应用首页的State中添加监听逻辑:

    import 'package:flutter/material.dart';
    import 'package:uni_links/uni_links.dart';
    
    class HomePage extends StatefulWidget {
      const HomePage({super.key});
    
      @override
      State<HomePage> createState() => _HomePageState();
    }
    
    class _HomePageState extends State<HomePage> {
      @override
      void initState() {
        super.initState();
        // 处理冷启动场景:应用未启动时点击链接打开的情况
        _handleColdStartLink();
        // 处理热启动场景:应用后台运行时点击链接唤起的情况
        _listenHotStartLink();
      }
    
      Future<void> _handleColdStartLink() async {
        try {
          final initialLink = await getInitialLink();
          if (initialLink != null) {
            _parseGoogleMapsLink(initialLink);
          }
        } catch (e) {
          // 自行处理异常即可
        }
      }
    
      void _listenHotStartLink() {
        linkStream.listen((String? link) {
          if (link != null) {
            _parseGoogleMapsLink(link);
          }
        }, onError: (err) {
          // 自行处理流异常即可
        });
      }
    
      // 后续的解析、导航逻辑写在这里
    }
    

第三步:解析Google Maps链接的经纬度参数

实现解析方法,从链接中提取坐标:

void _parseGoogleMapsLink(String link) {
  Uri uri = Uri.parse(link);
  // 提取q参数
  String? qParam = uri.queryParameters['q'];
  if (qParam == null || !qParam.contains(',')) {
    // 无有效坐标参数的情况自行处理
    return;
  }
  List<String> coords = qParam.split(',');
  if (coords.length != 2) return;
  try {
    double latitude = double.parse(coords[0].trim());
    double longitude = double.parse(coords[1].trim());
    // 拿到坐标后执行后续导航逻辑
    _startNavigation(latitude, longitude);
  } catch (e) {
    // 坐标格式错误的情况自行处理
  }
  // 如需适配其他格式的谷歌地图链接(如ll参数、placeId参数),可在这里扩展解析逻辑
}

第四步:实现导航逻辑

拿到经纬度后,可根据需求选择实现方式:

  • 调用系统已安装的地图应用的跳转协议实现路线规划
  • 应用内集成地图SDK(如高德地图、百度地图、Google Maps Flutter SDK)自行实现路线导航功能

常见适配失败排查点

  • Android端需确认intent-filter配置在启动Activity标签内,不要放在application标签下
  • iOS端需确认Associated Domains已在开发者后台和Xcode中同时开启,域名配置无拼写错误
  • 不要仅监听热启动的流回调,必须单独处理冷启动场景的初始链接获取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:36:04