In der Apple Developer Documentation (Link ist jetzt tot) wird erläutert, dass die Google Maps-Anwendung, die standardmäßig mit dem iPhone geliefert wird, gestartet wird, wenn Sie einen Link auf einer Webseite platzieren und dann darauf klicken, während Sie Mobile Safari auf dem iPhone verwenden.
Wie kann ich dieselbe Google Maps-Anwendung mit einer bestimmten Adresse in meiner nativen iPhone-Anwendung (dh keine Webseite über Mobile Safari) auf dieselbe Weise starten wie durch Tippen auf eine Adresse in Kontakte die Karte?
HINWEIS: DIESES FUNKTIONIERT NUR AM GERÄT. NICHT IM SIMULATOR.
ios
objective-c
google-maps
Davidmytton
quelle
quelle
Antworten:
Verwenden Sie für iOS 5.1.1 und niedriger die
openURL
Methode vonUIApplication
. Es wird die normale magische URL-Neuinterpretation des iPhone durchführen. damit[someUIApplication openURL:[NSURL URLWithString:@"http://maps.google.com/maps?q=London"]]
sollte die Google Maps App aufrufen.
Ab iOS 6 rufen Sie Apples eigene Maps-App auf. Konfigurieren Sie dazu ein
MKMapItem
Objekt mit dem Ort, den Sie anzeigen möchten, und senden Sie ihm dieopenInMapsWithLaunchOptions
Nachricht. Versuchen Sie Folgendes, um am aktuellen Standort zu beginnen:[[MKMapItem mapItemForCurrentLocation] openInMapsWithLaunchOptions:nil];
Sie müssen dafür mit MapKit verknüpft sein (und ich glaube, es wird zur Eingabe des Standorts aufgefordert).
quelle
[[NSURL alloc] initWithString:]
sollten Sie verwenden,[NSURL URLWithString:]
da es ein automatisch freigegebenes Objekt bereitstellt.someUIApplication
Sie könnten einfach sagen[UIApplication sharedApplication]
(da ich keine andere Situation kenne, in der SieUIApplication
außer einer machen würden)Genau. Der Code, den Sie benötigen, um dies zu erreichen, ist ungefähr so:
UIApplication *app = [UIApplication sharedApplication]; [app openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=London"]];
da gemäß der Dokumentation UIApplication nur im Anwendungsdelegierten verfügbar ist, es sei denn, Sie rufen sharedApplication auf.
quelle
Probieren Sie diesen Code aus, um Google Maps an bestimmten Koordinaten zu öffnen:
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]];
Sie können die latlong-Zeichenfolge durch die aktuelle Position von CoreLocation ersetzen.
Sie können die Zoomstufe auch mit dem Flag (”z“) festlegen. Die Werte sind 1-19. Hier ist ein Beispiel:
quelle
Es gibt jetzt auch die App Store Google Maps-App, die unter https://developers.google.com/maps/documentation/ios/urlscheme dokumentiert ist
Sie sollten also zuerst überprüfen, ob es installiert ist:
[[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString:@"comgooglemaps://"]];
Und dann können Sie bedingt ersetzen
http://maps.google.com/maps?q=
mitcomgooglemaps://?q=
.quelle
Hier ist die Apple URL Scheme-Referenz für Kartenlinks: https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html
** Die Liste der unterstützten Parameter finden Sie unter dem obigen Link.
quelle
Wenn Sie ios 10 verwenden, vergessen Sie bitte nicht, Abfrageschemata in Info.plist hinzuzufügen
Wenn Sie Ziel-c verwenden
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]]; }
Wenn Sie Swift 2.2 verwenden
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)!) }
Wenn Sie Swift 3.0 verwenden
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)!) }
quelle
Testen Sie für die Telefonfrage auf dem Simulator? Dies funktioniert nur auf dem Gerät selbst.
Außerdem gibt openURL einen Bool zurück, mit dem Sie überprüfen können, ob das Gerät, auf dem Sie ausgeführt werden, die Funktionalität unterstützt. Zum Beispiel können Sie auf einem iPod Touch nicht telefonieren :-)
quelle
Rufen Sie einfach diese Methode auf und fügen Sie das Google Maps-URL-Schema wie in dieser Antwort zu Ihrer .plist-Datei hinzu .
Swift-4: -
func openMapApp(latitude:String, longitude:String, address:String) { var myAddress:String = address //For Apple Maps let testURL2 = URL.init(string: "http://maps.apple.com/") //For Google Maps let testURL = URL.init(string: "comgooglemaps-x-callback://") //For Google Maps if UIApplication.shared.canOpenURL(testURL!) { var direction:String = "" myAddress = myAddress.replacingOccurrences(of: " ", with: "+") direction = String(format: "comgooglemaps-x-callback://?daddr=%@,%@&x-success=sourceapp://?resume=true&x-source=AirApp", latitude, longitude) let directionsURL = URL.init(string: direction) if #available(iOS 10, *) { UIApplication.shared.open(directionsURL!) } else { UIApplication.shared.openURL(directionsURL!) } } //For Apple Maps else if UIApplication.shared.canOpenURL(testURL2!) { var direction:String = "" myAddress = myAddress.replacingOccurrences(of: " ", with: "+") var CurrentLocationLatitude:String = "" var CurrentLocationLongitude:String = "" if let latitude = USERDEFAULT.value(forKey: "CurrentLocationLatitude") as? Double { CurrentLocationLatitude = "\(latitude)" //print(myLatitude) } if let longitude = USERDEFAULT.value(forKey: "CurrentLocationLongitude") as? Double { CurrentLocationLongitude = "\(longitude)" //print(myLongitude) } direction = String(format: "http://maps.apple.com/?saddr=%@,%@&daddr=%@,%@", CurrentLocationLatitude, CurrentLocationLongitude, latitude, longitude) let directionsURL = URL.init(string: direction) if #available(iOS 10, *) { UIApplication.shared.open(directionsURL!) } else { UIApplication.shared.openURL(directionsURL!) } } //For SAFARI Browser else { var direction:String = "" direction = String(format: "http://maps.google.com/maps?q=%@,%@", latitude, longitude) direction = direction.replacingOccurrences(of: " ", with: "+") let directionsURL = URL.init(string: direction) if #available(iOS 10, *) { UIApplication.shared.open(directionsURL!) } else { UIApplication.shared.openURL(directionsURL!) } } }
Hoffe, das ist was du suchst. Alle Bedenken melden sich bei mir. :) :)
quelle
"g" wechselt zu "q"
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=London"]]
quelle
Wenn Sie immer noch Probleme haben, zeigt dieses Video, wie Sie "Meine Karten" von Google auf dem iPhone anzeigen lassen können. Sie können dann den Link nehmen und an jeden senden, und es funktioniert.
http://www.youtube.com/watch?v=Xo5tPjsFBX4
quelle
Verwenden Sie diese API, um zur Google-Karte zu wechseln, und senden Sie den Längen- und Breitengrad des Ziels
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];
quelle
Wenn Sie mehr Flexibilität benötigen, als das Google-URL-Format Ihnen bietet, oder wenn Sie eine Karte in Ihre Anwendung einbetten möchten, anstatt die Karten-App zu starten, finden Sie ein Beispiel unter https://sourceforge.net/projects/quickconnect .
quelle
Wenn Sie mehr Flexibilität benötigen, als das Google-URL-Format Ihnen bietet, oder wenn Sie eine Karte in Ihre Anwendung einbetten möchten, anstatt die Karten-App zu starten, finden Sie hier ein Beispiel .
Sie erhalten sogar den Quellcode für die gesamte Einbettung.
quelle
iPhone4 iOS 6.0.1 (10A523)
Für Safari und Chrome. Beide neueste Version bis jetzt (2013-Jun-10).
Das folgende URL-Schema funktioniert ebenfalls. Aber wenn Chrome nur innerhalb der Seite funktioniert, funktioniert es nicht über die Adressleiste.
Karten: q = GivenTitle @ Breite, Länge
quelle
**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]];
quelle
Arbeitscode wie bei Swift 4:
Schritt 1 - Fügen Sie Folgendes zur info.plist hinzu
Schritt 2 - Verwenden Sie den folgenden Code, um Google Maps anzuzeigen
let destinationLatitude = "40.7128" let destinationLongitude = "74.0060" if UIApplication.shared.canOpenURL(URL(string: "comgooglemaps:")!) { if let url = URL(string: "comgooglemaps://?ll=\(destinationLatitude),\(destinationLongitude)"), !url.absoluteString.isEmpty { UIApplication.shared.open(url, options: [:], completionHandler: nil) } }else{ if let url = URL(string: "http://maps.google.com/maps?ll=\(destinationLatitude),\(destinationLongitude)"), !url.absoluteString.isEmpty { UIApplication.shared.open(url, options: [:], completionHandler: nil) } }
quelle