2011-03-01 65 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。它的網址是「waze://?q = address」,其中address是一個真實地址。 – Misha 2011-03-01 21:38:22

相關問題