2011-03-01 4 views
1

사용자에게 특정 위치로 데려 가기 위해 어떤 GPS 응용 프로그램을 사용할지 묻고 싶습니다. GPS 앱이 설치되어 있는지 먼저 확인해야합니다 ... 어떻게해야합니까? 사용자가 특정 앱을 선택하면 어떻게 활성화하고 특정 목적지로 연결하도록 알릴 수 있습니까?iPhone에 설치된 GPS 시스템을 사용하는 방법

답변

3

리소스가 부족하지만 할 수 있습니다. & 내 이전 소스 코드 붙여 넣기 ... Tip을 다른 것으로 바꿉니다. 그것은 단순한 클래스로, locLatitudelocLongitude 값을 가지고 있습니다. TomTom은 URL 스키마를 찾을 수 없어서 지원되지 않습니다. 더 이상 필요가 없으므로 다시 검색하지 않았습니다.

typedef enum { 
    ExternalNavigationAppGoogleMaps, 
    ExternalNavigationAppNavigon, 
    ExternalNavigationAppTomTom 
} ExternalNavigationApp; 

+ (BOOL)isSupported:(ExternalNavigationApp)navigationApp; 
+ (BOOL)navigateTo:(Tip *)tip viaApp:(ExternalNavigationApp)navigationApp; 
+ (BOOL)navigateTo:(Tip *)tip from:(CLLocationCoordinate2D)from viaApp:(ExternalNavigationApp)navigationApp; 

... 구현 부품

+ (NSString *)googleMapsUrl:(Tip *)tip from:(CLLocationCoordinate2D)from { 
    NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps?saddr=%1.6f,%1.6f&daddr=%1.6f,%1.6f", 
          from.latitude, from.longitude, 
          [tip.locLatitude floatValue], [tip.locLongitude floatValue]]; 
    return urlString; 
} 

+ (NSString *)navigonAppUrl:(Tip *)tip { 
    NSString *urlString = [NSString stringWithFormat:@"navigon://%@|%@||||||%f|%f", 
          [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"], 
          tip.name, 
          [tip.locLongitude floatValue], 
          [tip.locLatitude floatValue]]; 

    return urlString; 
} 

+ (NSString *)tomtomAppUrl:(Tip *)tip { 
    return nil; 
} 

+ (NSURL *)urlForApp:(ExternalNavigationApp)navigationApp withTip:(Tip *)tip from:(CLLocationCoordinate2D)from { 
    NSString *urlString = nil; 
    if (ExternalNavigationAppNavigon == navigationApp) { 
     urlString = [self navigonAppUrl:tip]; 
    } else if (ExternalNavigationAppTomTom == navigationApp) { 
     urlString = [self tomtomAppUrl:tip]; 
    } else if (ExternalNavigationAppGoogleMaps == navigationApp) { 
     urlString = [self googleMapsUrl:tip from:from]; 
    } 

    if (urlString == nil) 
     return nil; 

    return [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
} 

+ (BOOL)isSupported:(ExternalNavigationApp)navigationApp { 
    CLLocationCoordinate2D coord; 
    NSURL *url = [self urlForApp:navigationApp withTip:nil from:coord]; 

    if (url == nil) 
     return NO; 

    return [[UIApplication sharedApplication]canOpenURL:url]; 
} 

+ (BOOL)navigateTo:(Tip *)tip viaApp:(ExternalNavigationApp)navigationApp { 
    CLLocationCoordinate2D coord; 
    NSURL *url = [self urlForApp:navigationApp withTip:tip from:coord]; 

    if (url == nil) 
     return NO; 

    return [[UIApplication sharedApplication] openURL:url]; 
} 

+ (BOOL)navigateTo:(Tip *)tip from:(CLLocationCoordinate2D)from viaApp:(ExternalNavigationApp)navigationApp { 
    NSURL *url = [self urlForApp:navigationApp withTip:tip from:from]; 

    if (url == nil) 
     return NO; 

    return [[UIApplication sharedApplication] openURL:url]; 
} 
+0

네 사람! 그게 전부 야. 감사. 완벽하게 작동합니다. 사용할 수있는 앱이 하나 더 있습니다. Waze. 그 URL은 "waze : //? q = address"이며, address는 실제 주소입니다. – Misha

관련 문제