我如何从我的原生应用程序中启动Google Maps iPhone应用程序?
Apple开发者文档 (现在链接已经失效)解释说,如果您在网页中放置链接,然后在iPhone上使用Mobile Safari时单击该链接,则会启动与iPhone一样提供的Google地图应用程序。
我如何才能在自己的本地iPhone应用程序(即不通过Mobile Safari的网页)中启动具有特定地址的Google Maps应用程序,方法与点击联系人中地址启动地图的方式相同?
注意:这只适用于本设备。 不在模拟器中。
对于iOS 5.1.1及更低版本,请使用UIApplication
的openURL
方法。 它将执行正常的iPhone神奇的URL重新解释。 所以
[someUIApplication openURL:[NSURL URLWithString:@"http://maps.google.com/maps?q=London"]]
应该调用Google地图应用程序。
从iOS 6开始,您将会调用Apple自己的地图应用程序。 为此,使用要显示的位置来configuration一个MKMapItem
对象,然后向其发送openInMapsWithLaunchOptions
消息。 要从当前位置开始,请尝试:
[[MKMapItem mapItemForCurrentLocation] openInMapsWithLaunchOptions:nil];
你需要连接到MapKit的(这将提示我的位置访问,我相信)。
究竟。 你需要的代码就是这样的:
UIApplication *app = [UIApplication sharedApplication]; [app openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=London"]];
因为根据文档 ,UIApplication只能在应用程序委托中使用,除非调用sharedApplication。
要以特定的坐标打开Google地图,请尝试以下代码:
NSString *latlong = @"-56.568545,1.256281"; NSString *url = [NSString stringWithFormat: @"http://maps.google.com/maps?ll=%@", [latlong stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
您可以使用CoreLocation中的当前位置replacelatlongstring。
您也可以使用(“z”)标志指定缩放级别。 值是1-19。 这是一个例子:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@“ http://maps.google.com/maps?z=8 ”]];
现在还有App Store Google地图应用,在https://developers.google.com/maps/documentation/ios/urlscheme
所以你首先检查它的安装:
[[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString:@"comgooglemaps://"]];
然后,您可以使用comgooglemaps://?q=
有条件地replacehttp://maps.google.com/maps?q=
。
以下是适用于Map Links的Apple URL Scheme参考: http :
创build有效的地图链接的规则如下:
- 该域必须是google.com,子域必须是地图或ditu。
- 如果查询包含网站作为键和本地作为值,则path必须是/,/ maps,/ local或/ m。
- path不能是/ maps / *。
- 所有参数必须被支持。 请参阅表1以获取支持的参数列表**。
- 如果值是一个URL,那么参数不能是q = *(因此KML不被拾取)。
- 参数不能包含view = text或dirflg = r。
**请参阅上面的链接以获取支持的参数列表。
如果您使用的是ios 10,请不要忘记在Info.plist中添加查询scheme
<key>LSApplicationQueriesSchemes</key> <array> <string>comgooglemaps</string> </array>
如果你正在使用objective-c
if ([[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString:@"comgooglemaps:"]]) { NSString *urlString = [NSString stringWithFormat:@"comgooglemaps://?ll=%@,%@",destinationLatitude,destinationLongitude]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]]; } else { NSString *string = [NSString stringWithFormat:@"http://maps.google.com/maps?ll=%@,%@",destinationLatitude,destinationLongitude]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:string]]; }
如果你使用的是swift 2.2
if UIApplication.sharedApplication().canOpenURL(NSURL(string: "comgooglemaps:")!) { var urlString = "comgooglemaps://?ll=\(destinationLatitude),\(destinationLongitude)" UIApplication.sharedApplication().openURL(NSURL(string: urlString)!) } else { var string = "http://maps.google.com/maps?ll=\(destinationLatitude),\(destinationLongitude)" UIApplication.sharedApplication().openURL(NSURL(string: string)!) }
如果你使用的是swift 3.0
if UIApplication.shared.canOpenURL(URL(string: "comgooglemaps:")!) { var urlString = "comgooglemaps://?ll=\(destinationLatitude),\(destinationLongitude)" UIApplication.shared.openURL(URL(string: urlString)!) } else { var string = "http://maps.google.com/maps?ll=\(destinationLatitude),\(destinationLongitude)" UIApplication.shared.openURL(URL(string: string)!) }
对于手机的问题,你在模拟器上testing吗? 这只适用于设备本身。
另外,openURL返回一个bool,你可以用它来检查你运行的设备是否支持这个function。 例如,您无法在iPod Touch上拨打电话:-)
“g”变成“q”
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=London"]]
如果你仍然有麻烦,这个video显示如何从谷歌“我的地图”显示在iPhone上 – 你可以把链接,并将其发送给任何人,它的工作原理。
要移至Google地图,请使用此api并发送目的地的经纬度
NSString* addr = nil; addr = [NSString stringWithFormat:@"http://maps.google.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", destinationLat,destinationLong]; NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; [[UIApplication sharedApplication] openURL:url];
如果您需要比Google URL格式更具灵活性,或者您希望在应用程序中embedded地图,而不是启动地图应用程序,则可以在https://sourceforge.net/projects/quickconnect上find示例。;
如果您需要比Googleurl格式提供的更多灵活性,或者您希望在应用程序中embedded地图,而不是启动地图应用程序,则可以使用此应用程序。
它甚至会提供源代码来完成所有的embedded。
iPhone4 iOS 6.0.1(10A523)
对于Safari和Chrome。 最新版本至今(2013年6月 – 10日)。
下面的URLscheme也适用。 但是Chrome浏览器只能在页面内工作,不能从地址栏中运行。
地图:Q = GivenTitle @纬度,经度
**Getting Directions between 2 locations** NSString *googleMapUrlString = [NSString stringWithFormat:@"http://maps.google.com/?saddr=%@,%@&daddr=%@,%@", @"30.7046", @"76.7179", @"30.4414", @"76.1617"]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:googleMapUrlString]];