2012-02-09 13 views
3

デーモンとして起動する小さなアプリケーションを作成しました。基本的には携帯電話のGPS位置を出力します。iOSの脱獄 - バックグラウンドでの位置取得方法

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 

私は踏み台オフ手動でアプリケーションを実行するのであれば、それは正常に動作し、GPSによる位置情報を記録します...少なくとも、 15〜20秒間は...予想通りの動作ではないため、バネボードはアプリケーションを終了させます。

起動時にアプリケーションを起動すると(launchDaemon)、それも正常に起動しますが、デリゲート関数 'didUpdateToLocation'が呼び出されることはありません!!

私はiOS 5を使用していますので、問題の原因がわかりません。 本当にありがとうございます。

THX !!

答えて

1

「startUpdatingLocation」を呼び出す代わりに、startMonitoringSignificantLocationChangesを使用してください。ユーザーの場所が大きく変わるたびに、アプリに電話がかかります。バックグラウンド処理をしてアプリを開くかどうかを決定する時間があります。

また、ユーザーが監視したい地域を入力すると、デバイスにアプリを呼び出させることもできます。

詳しくはquestionを参照してください。

+0

こんにちは。ヒントのThxしかしそれはまだ動作しません!デリゲート関数は呼び出されません。しかし、これはiOS 5以降ではこれ以上できないと思います – Pascal

関連する問題