如果有颤动,请打开Goog​​le地图应用

时间:2017-11-01 00:48:08

标签: flutter

我试图检测是否在iOS上安装了Google地图应用,如果是,请启动它,如果没有,请启动Apple Maps。这是我到目前为止所拥有的,但在安装了谷歌地图的手机上,它没有检测到它并正确启动。

有什么想法吗?

import 'package:url_launcher/url_launcher.dart';

_launchMaps() async {
  String googleUrl =
    'comgooglemaps://?center=${trip.origLocationObj.lat},${trip.origLocationObj.lon}';
  String appleUrl =
    'https://maps.apple.com/?sll=${trip.origLocationObj.lat},${trip.origLocationObj.lon}';
  if (await canLaunch("comgooglemaps://")) {
    print('launching com googleUrl');
    await launch(googleUrl);
  } else if (await canLaunch(appleUrl)) {
    print('launching apple url');
    await launch(appleUrl);
  } else {
    throw 'Could not launch url';
  }
}

我从这里取消了网址方案:How would I be able to open google maps when I press a button in my app?

8 个答案:

答案 0 :(得分:8)

我发现了我的问题:这需要在plist文件中。上面问题中的代码很好。 (问题中引用的SO答案仅提及“comgooglemaps”字符串。)

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

文档:https://developers.google.com/maps/documentation/ios-sdk/start#step_7_declare_the_url_schemes_used_by_the_api

答案 1 :(得分:4)

import 'package:url_launcher/url_launcher.dart';

static void launchMapsUrl(
      sourceLatitude,
      sourceLongitude,
      destinationLatitude,
      destinationLongitude) async {
    String mapOptions = [
      'saddr=$sourceLatitude,$sourceLongitude',
      'daddr=$destinationLatitude,$destinationLongitude',
      'dir_action=navigate'
    ].join('&');

    final url = 'https://www.google.com/maps?$mapOptions';
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Could not launch $url';
    }  }

您可以在此处直接使用此功能并传递所需的参数,也可以导入此软件包https://pub.dev/packages/url_launcher/

答案 2 :(得分:2)

您可以安装软件包url_launcher并使用下面的代码:

import 'package:url_launcher/url_launcher.dart';

class MapUtils {

  static openMap(double latitude, double longitude) async {
    String googleUrl = 'https://www.google.com/maps/search/?api=1&query=$latitude,$longitude';
    if (await canLaunch(googleUrl)) {
      await launch(googleUrl);
    } else {
      throw 'Could not open the map.';
    }
  }
}

现在,您可以在应用中打开Goog​​le地图,只需调用此方法即可:

MapUtils.openMap(-3.823216,-38.481700);

答案 3 :(得分:2)

如果您没有实际的 latlong ,则只需将地址传递给Google地图。

void open(Event event) async {
  String query = Uri.encodeComponent(event.address);
  String googleUrl = "https://www.google.com/maps/search/?api=1&query=$query";

  if (await canLaunch(googleUrl)) {
    await launch(googleUrl);
  }
}

当然,您在地址中拥有的信息越多,搜索的准确性就越高。与在实际的Google Maps页面或应用程序上查找内容完全相同。

顺便说一句,您需要先对地址进行url编码,然后再将其添加到URL中,以支持特殊字符(例如空格)。它仅对于iOS才需要,但是,我们希望针对所有环境进行开发。

答案 4 :(得分:1)

如果要使用方向导航,则只需创建一个包含源坐标和目标坐标以及其他坐标即可添加为停靠点的网址。

步骤: 1.安装url_launcher插件

  1. 编写如下代码。
_launchURL(String url) async {
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Could not launch $url';
    }
  }




const url ='https://www.google.com/maps/dir/?api=1&origin=43.7967876,-79.5331616&destination=43.5184049,-79.8473993&waypoints=43.1941283,-79.59179|43.7991083,-79.5339667|43.8387033,-79.3453417|43.836424,-79.3024487&travelmode=driving&dir_action=navigate';
_launchURL(url);

答案 5 :(得分:1)

这样做吧

完整代码如下

static void navigateTo(double lat, double lng) async {
   var uri = Uri.parse("google.navigation:q=$lat,$lng&mode=d");
   if (await canLaunch(uri.toString())) {
      await launch(uri.toString());
   } else {
      throw 'Could not launch ${uri.toString()}';
   }
}
pubspec.yaml中的

1)

dependencies:
  flutter:
    sdk: flutter
    ...
    url_launcher: ^5.7.8

2)导入要使用的任何地方

import 'package:url_launcher/url_launcher.dart';

3)最终致电

onPressed: () {
   navigateTo(location.lat, location.lng);
},

答案 6 :(得分:0)

使用网址启动器

在yaml文件中:url_launcher:^ 5.0.2 last

然后您可以使用此方法打开以所提供的经度和纬度为中心的google地图

more info to maps intent from docs [here][2]

launchMap({String lat = "47.6", String long = "-122.3"}) async{
  var mapSchema = 'geo:$lat,$long';
  if (await canLaunch(mapSchema)) {
    await launch(mapSchema);
  } else {
    throw 'Could not launch $mapSchema';
  }
}

答案 7 :(得分:0)

|A|A|
|B| |
|C|C|
|D|D|
| |E|
| |F|
|G|G|
| |H|
| |X|
|Z| |