Jak mogę uruchomić aplikację Google Maps iPhone z poziomu mojej własnej aplikacji natywnej?

Dokumentacja programisty Apple (link jest martwy teraz) wyjaśnia, że jeśli umieścisz link na stronie internetowej, a następnie klikniesz go podczas korzystania z mobilnego Safari na iPhonie, uruchomi się aplikacja Google Maps, która jest standardowo dostarczana z iPhonem.

Jak mogę uruchomić tę samą aplikację Google Maps z określonym adresem z mojej własnej aplikacji na iPhone ' a (tj. Nie strony internetowej za pośrednictwem mobilnego Safari) w taki sam sposób, jak dotykanie adresu w kontaktach uruchamia mapę?

UWAGA: DZIAŁA TO TYLKO NA SAMYM URZĄDZENIU. NIE W SYMULATORZE.

Author: Vadim Kotov, 2008-08-27

15 answers

W przypadku systemu iOS 5.1.1 i niższych należy użyć metody openURL UIApplication. Wykona normalną reinterpretację magicznego adresu URL iPhone ' a. więc

[someUIApplication openURL:[NSURL URLWithString:@"http://maps.google.com/maps?q=London"]]

Powinien wywołać aplikację Google maps.

[[6]}od iOS 6 będziesz wywoływać własną aplikację Maps firmy Apple. W tym celu skonfiguruj obiekt MKMapItem z lokalizacją, którą chcesz wyświetlić, a następnie wyślij mu wiadomość openInMapsWithLaunchOptions. Aby rozpocząć w bieżącej lokalizacji, spróbuj:
[[MKMapItem mapItemForCurrentLocation] openInMapsWithLaunchOptions:nil];

Musisz być połączony z MapKit w tym celu (i wyświetli monit o lokalizację dostęp, jak sądzę).

 65
Author: Adam Wright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-17 17:12:05

Dokładnie. Kod, którego potrzebujesz, aby to osiągnąć, to coś w tym stylu:

UIApplication *app = [UIApplication sharedApplication];
[app openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=London"]];

Ponieważ zgodnie z dokumentacją , aplikacja jest dostępna tylko w delegacie aplikacji, chyba że wywołasz sharedApplication.

 31
Author: DavidM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-15 16:37:22

Aby otworzyć Google Maps w określonych współrzędnych, wypróbuj ten kod:

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]];

Możesz zastąpić łańcuch latlong bieżącą lokalizacją z CoreLocation.

Można również określić poziom powiększenia, używając znacznika ("z"). Wartości to 1-19. Oto przykład:

[[UIApplication sharedApplication] openURL:[Nsurl URLWithString:@ " http://maps.google.com/maps?z=8"]];

 29
Author: Jane Sales,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-31 13:34:07

Istnieje również aplikacja App Store Google Maps, udokumentowana w https://developers.google.com/maps/documentation/ios/urlscheme

Więc najpierw sprawdź czy jest zainstalowany:

[[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString:@"comgooglemaps://"]];

I wtedy możesz warunkowo zastąpić http://maps.google.com/maps?q= przez comgooglemaps://?q=.

 18
Author: Michael Baltaks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-13 14:05:54

Oto odnośnik Apple URL Scheme dla linków do Map: http://developer.apple.com/iphone/library/featuredarticles/iPhoneURLScheme_Reference/Articles/MapLinks.html

Zasady tworzenia poprawnego linku do mapy są następujące:

  • domena musi być google.com a subdomena musi być maps lub ditu.
  • ścieżka musi być/, / maps, / local lub / m, jeśli zapytanie zawiera site jako klucz i local jako wartość.
  • ścieżka nie może być / maps/*.
  • wszystkie parametry muszą być obsługiwane. Lista obsługiwanych parametrów znajduje się w tabeli 1**.
  • parametr nie może być q = * jeśli wartość jest adresem URL(więc KML nie jest pobierany).
  • parametry nie mogą zawierać view = text lub dirflg = r.

* * lista obsługiwanych parametrów znajduje się w linku powyżej.

 13
Author: Harry Love,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-13 18:27:41

Jeśli używasz ios 10, nie zapomnij dodać schematów zapytań w Info.plist

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>comgooglemaps</string>
</array>

Jeśli używasz 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]];
    }

Jeśli używasz 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)!)
}

Jeśli używasz 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)!)
}
 8
Author: Ruchin Somal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-29 17:38:18

Dla pytania telefon, testujesz na symulatorze? Działa to tylko na samym urządzeniu.

Ponadto, openURL zwraca bool, którego możesz użyć, aby sprawdzić, czy urządzenie, na którym pracujesz, obsługuje tę funkcjonalność. Na przykład nie można wykonywać połączeń na iPodzie Touch: -)

 2
Author: Jane Sales,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-10 02:07:41

"g" zmień na " q "

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://maps.google.com/maps?q=London"]]
 1
Author: Pavel Kurta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-30 18:28:58

Jeśli nadal masz problemy, ten film pokazuje, jak dostać "moje mapy" z google, aby pokazać się na iPhonie . możesz wtedy wziąć link i wysłać go każdemu i działa.

Http://www.youtube.com/watch?v=Xo5tPjsFBX4

 1
Author: Tex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-21 15:05:20

Aby przejść do mapy Google użyj tego api i wyślij szerokość i długość docelową

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];
 1
Author: DURGESH Chaurasiya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-07 07:40:09

Po Prostu zadzwoń do tej metody i dodaj schemat URL Google Maps do swojego .plik plist taki sam jak Ta Odpowiedź .

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!)
        }
    }
}
Hope, tego właśnie szukasz. / Align = "left" / :)
 1
Author: Meet Doshi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-27 10:29:33

Jeśli potrzebujesz większej elastyczności niż daje format URL Google lub chcesz osadzić mapę w aplikacji zamiast uruchamiać aplikację map, przykład znajduje się pod adresem https://sourceforge.net/projects/quickconnect .

 0
Author: RAVI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-03 12:57:22

Jeśli potrzebujesz większej elastyczności niż daje Format URL Google lub chcesz osadzić mapę w aplikacji zamiast uruchamiać aplikację map Oto przykład.

Dostarczy Ci nawet kod źródłowy do wykonania całego osadzenia.

 0
Author: Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-06 03:40:34

IPhone4 iOS 6.0.1 (10a523)

Dla Safari i Chrome. Obie najnowsze wersje do tej pory(2013-Jun-10th).

Schemat URL poniżej również działa. Ale w przypadku Chrome działa tylko wewnątrz strony nie działa z paska adresu.

Maps:q=GivenTitle@latitude, longitude

 0
Author: 3shmaoy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-10 11:18:43
**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]];
 0
Author: Mannam Brahmam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-18 12:38:23