Как использовать установленные системы GPS в iPhone - PullRequest
1 голос
/ 01 марта 2011

Я хочу спросить пользователя, какое приложение GPS он хочет использовать, чтобы доставить его в определенное место.Я думаю, мне нужно сначала проверить, какие приложения GPS установлены ... Как я могу это сделать?Когда пользователь выбирает конкретное приложение, как я могу активировать его и указать, что оно должно быть направлено к определенному месту назначения?

1 Ответ

3 голосов
/ 01 марта 2011

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