在Flutter中使用url_launcher打开Map应用程序(GoogleMap,AppleMap,Waze),获得net::ERR_UNKNOWN_URL_SCHEME?

waxmsbnn  于 2023-04-22  发布在  Flutter
关注(0)|答案(1)|浏览(199)

我希望用户选择一个Map应用程序(谷歌Map或Waze),然后点击一个 * 开始导航 * 按钮,打开选定的应用程序与预先选定的目的地坐标(纬度和经度)。
我一直在使用 url_launcher 来实现这一点。当点击按钮时,url会打开应用程序的浏览器版本(正确),并提示“在应用程序中继续”。当我点击“在应用程序中继续”时,它会中断,并给出以下错误消息:net::ERR_UNKNOWN_URL_SCHEME。这发生在Google Maps和Waze上。
下面是按下 start navigating 按钮时调用的代码:

void launchMaps(double latitude, double longitude) {
if (getSelectedMap() == "waze" && Platform.isAndroid) {
  launchUrl(Uri.parse(
      'https://waze.com/ul?ll= $latitude,$longitude&navigate=yes?utm_source=com.posttag'));
} else if (getSelectedMap() == "google" && Platform.isAndroid) {
  launchUrl(Uri.parse(
      'https://maps.google.com?saddr=My+Location&daddr=$latitude,$longitude'));
}

感谢您的任何帮助!

yeotifhr

yeotifhr1#

如何a)检查Flutter中的设备上是否安装了Map应用程序(Google,Apple,Waze),以及B)如何打开此应用程序开始导航到预选坐标:检查是否安装了Map应用程序:下面的代码检查设备上是否安装了Map。将www.example.com更改为MapType.appleMapType.google或MapType.waze用于其他Map应用程序。

bool? onPhone = await MapLauncher.isMapAvailable(MapType.apple);

记住notifyListener();在设置任何await变量后。打开Map应用程序开始导航:下面的代码检查在设备上启动Map应用程序。将www.example.com更改为MapType.appleMapType.google或MapType.waze用于其他Map应用程序。

await MapLauncher.showDirections(
        mapType: MapType.apple,
        destination: Coords(latitude, longitude),
        destinationTitle: address,
      );

对于Google Maps,可能需要替换特殊字符,例如:

address = address.replaceAll("&", "and");

Waze不允许使用destinationTitle --这在其他Map应用中显示为位置的标题而不是坐标。下面的代码不会立即启动导航;相反,它只是简单地显示一个目标标记,您可以手动启动应用内导航。

await MapLauncher.showMarker(
        mapType: MapType.apple,
        coords: Coords(latitude, longitude),
        title: address,
      );

这一切都是用maps_launcher包完成的!

相关问题