джейлбрейк iOS - как получить местоположение в фоновом режиме - PullRequest
3 голосов
/ 09 февраля 2012

Я написал небольшое приложение, которое запускается как демон.Это в основном будет просто выводить местоположение телефона GPS.

main.m:

int main(int argc, char *argv[]) {

NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init];
LocationController *obj = [[LocationController alloc] init];
[obj getLocation];    
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop run];

[p drain];
return 0;
}

LocationController.m

@implementation LocationController
@synthesize locationManager;

-(id)init {
    self = [super init];
    if(self) {
        trackingGPS = false;
        locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
    }
    return self;
}

-(void)getLocation {
    [locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation     *)newLocation fromLocation:(CLLocation *)oldLocation {
    NSLog(@"NEW LOCATION :: %@", newLocation);
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    NSLog(@"LOCATION ERROR : %@", error);
}

-(void) dealloc {
    [locationManager release];
    [super dealloc];
}
@end

Так что, если я запускаю приложение вручную с трамплина, оно отлично работает и регистрирует GPSlocation ... хотя бы на 15-20 секунд ... тогда трамплин завершает работу приложения, потому что оно не отвечает - ожидаемое поведение.

Если я, однако, запускаю приложение при запуске (launchDaemon), оно также запускаетсяхорошо, но функция делегата didUpdateToLocation никогда не вызывается !!

Я на iOS 5, поэтому не знаю, в чем проблема.Любая помощь действительно ценится.

THX !!

1 Ответ

1 голос
/ 25 февраля 2012

Вместо вызова «startUpdatingLocation» следует использовать startMonitoringSignificantLocationChanges . Всякий раз, когда местоположение пользователя существенно меняется, оно вызывает ваше приложение, и у вас будет некоторое время, чтобы выполнить некоторую фоновую обработку и определить, хотите ли вы открыть свое приложение.

Устройство также может вызывать ваше приложение, если пользователь вводит регион, который вы хотите отслеживать.

Подробнее см. .

...