3

我写了一个作为守护进程启动的小应用程序。它基本上只会输出手机的 GPS 位置。

主要的.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 上,所以不确定问题是什么。任何帮助都非常感谢。

谢谢 !!

4

1 回答 1

1

而不是调用“startUpdatingLocation”,您应该使用startMonitoringSignificantLocationChanges。每当用户的位置发生重大变化时,它就会调用您的应用程序,您将有一些时间进行一些后台处理并确定是否要打开您的应用程序。

如果用户进入您希望监控的某个区域,您也可以让设备调用您的应用程序。

有关详细信息,请参阅此问题

于 2012-02-24T20:05:33.650 回答