从浏览器打开谷歌地图应用程序,在Android和iPhone上默认启动位置

som*_*omo 14 iphone mobile android google-maps

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

我的问题是,我希望能够将起始位置设置为当前位置,我希望它能够在Android和iphone浏览器中运行.根据我的经验,如果我将saddr留空,在android中默认为当前位置但在iphone上它只是将起始位置留空.如果我将saddr设置为"当前位置",则将起始位置设置为iphone上的当前位置,但在android上它无法识别该位置.

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

jer*_*rts 14

我只需用我的开始和目标Lng/Lat替换以下字符串中的值

http://maps.google.com/maps?saddr=START_ADD&daddr=DEST_ADD&ll=START_ADD
Run Code Online (Sandbox Code Playgroud)

然后我在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)));  
Run Code Online (Sandbox Code Playgroud)

对于iOS,如果您使用maps://而不是http://为url添加前缀,它将在手机上启动地图应用程序,该应用程序非常有效.就像是

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

[[UIApplication sharedApplication] openURL:[NSURL urlWithString:url]];
Run Code Online (Sandbox Code Playgroud)

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


Kar*_*ler 6

看一下url handler geo,告诉Browser使用本机App

<a href="geo:50.066274, 10.754427;">Location here!</a>
Run Code Online (Sandbox Code Playgroud)

不要忘记桌面浏览器的后备

  • 使用这个我的iPhone告诉我,Safari无法打开页面因为地址无效??? (5认同)

Ent*_*eco 5

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

最优雅的解决方案.这两个平台的区别不同,两个平台的链接相同.在等式中添加Blackberry或Windows Phone,如果不检查用户代理,您将在实现相同行为方面遇到更多困难


小智 1

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

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{

    CLLocationCoordinate2D location = newLocation.coordinate;
    Float x = location.latitude, y = location.longitude;
}
Run Code Online (Sandbox Code Playgroud)