В нем не хватает ресурсов, но это выполнимо ... Скопируйте и вставьте мой старый исходный код ... Просто замените Tip
чем-то другим.Это простой класс, который содержит значения locLatitude
и locLongitude
с некоторыми дополнительными деталями.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];
}