【问题标题】:open google maps app from a browser with default start location on android and iphone在 android 和 iphone 上使用默认开始位置的浏览器打开谷歌地图应用程序
【发布时间】:2011-07-15 06:13:50
【问题描述】:

我有一个移动网站,我有一个链接,可以使用链接格式在 iphone 和 android 上打开谷歌地图本地应用程序,默认开始和结束位置:http://maps.google.com/maps?saddr=XX&daddr=XX

我的问题是,我希望能够将起始位置设置为当前位置,并且我希望它可以在 android 和 iphone 浏览器上工作。根据我的经验,如果我将saddr留空,在android中默认为当前位置,但在iphone上它只是将起始位置留空。如果我将saddr设置为“当前位置”,这会将开始位置设置为iphone上的当前位置,但在android上它无法识别该位置。

我现在的解决方案是使用用户的地理纬度/经度坐标作为起始地址。这在两个平台上都能成功运行,但取决于用于获取坐标的方法,它可能不如应用程序上的 gps 用户当前位置准确。我想知道是否有某种方法可以获取链接以打开具有正确“当前位置”作为起点的本机应用程序。我知道我也可以有条件地检查用户代理并相应地创建链接,但我希望有一种更优雅的方式来做到这一点。

【问题讨论】:

  • 好吧,如果您在 iOS 中打开该链接,只需单击 1 次即可导航到您的 daddr 对吧?

标签: iphone android google-maps mobile


【解决方案1】:

我只需将以下字符串中的值替换为我的起点和终点 Lng/Lat

http://maps.google.com/maps?saddr=START_ADD&daddr=DEST_ADD&ll=START_ADD

然后我在 android 中启动这样的 url,这将让用户选择使用浏览器或他们的本地地图应用程序:

String url = "http://maps.google.com/maps?saddr=START_ADD&daddr=DEST_ADD&ll=START_ADD";

startActivity( new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url)));  

对于 iOS,如果您在 url 前面加上 maps:// 而不是 http://,它将在手机上启动地图应用程序,该应用程序运行良好。类似的东西

NSString *url = @"maps://maps.google.com/maps?saddr=START_ADD&daddr=DEST_ADD&ll=START_ADD";

[[UIApplication sharedApplication] openURL:[NSURL urlWithString:url]];

这就是我选择的处理方式。在任一设备上使用各自的位置框架获取当前的 Lng/Lat 都非常容易。结果对我来说似乎也总是很准确,您可以指定您想要结果的准确程度。越准确,电池消耗越多,有时需要更长的时间才能获取,但这通常是您最终调整的内容,以获得最佳实施结果。

【讨论】:

  • 该链接适用于 android,但 ios 链接仅打开 ios 地图应用程序未预加载起点或终点
【解决方案2】:

查看 url handler geo 告诉浏览器使用原生 App

<a href="geo:50.066274, 10.754427;">Location here!</a>

有一个可用的 polyfill 脚本,值得一试作为桌面浏览器的后备:https://github.com/prowestgis/dojo-geo-uri-polyfill

您也可以尝试以下 IO 设备:

comgooglemaps://?parameters

或:

comgooglemaps-x-callback://?parameters

https://developers.google.com/maps/documentation/urls/ios-urlscheme

【讨论】:

  • 谢谢,很有帮助!
  • 使用这个我的 iPhone 告诉我 Safari 无法打开页面,因为地址无效???
  • 这仅适用于安卓设备吗?也不能在我的 iPhone 的 Chrome 或 Safari 上工作。
【解决方案3】:

我知道我也可以有条件地检查用户代理并相应地创建链接,但我希望会有更多 优雅的方式来做到这一点。

最优雅的解决方案。这两个平台差异太大,要使用两个平台的相同链接来执行此操作。在等式中添加 Blackberry 或 Windows Phone,如果不检查用户代理,您将更难以实现相同的行为

【讨论】:

    【解决方案4】:

    在 Iphone 中,您可以通过以下方法使用 CLLocationManagerDelegate 获取当前位置。

    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
    
        CLLocationCoordinate2D location = newLocation.coordinate;
        Float x = location.latitude, y = location.longitude;
    }
    

    【讨论】:

    • 我知道有一些方法可以在原生移动应用程序(在 iphone 和 android 中)中执行此操作,但我正在寻找一种跨平台的方法来使用链接从浏览器中执行此操作。跨度>
    猜你喜欢
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2011-10-07
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 2013-08-09
    相关资源
    最近更新 更多