应用程序在后台运行

时间:2011-08-08 10:01:01

标签: iphone xcode

我想开发应用程序,在应用程序的后台模式中获取当前位置,并根据位置特定事件生成,

那么,我怎样才能使应用程序进入后台并获得持续的位置。

2 个答案:

答案 0 :(得分:2)

Apple编写了一个演示应用程序,完全按照要求提出:Breadcrumb

答案 1 :(得分:0)

- (CLLocationManager *)locationManager
{                
    if (locationManager != nil)
        return locationManager;

    locationManager = [[CLLocationManager alloc] init];

 //locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;

 locationManager.delegate = self;

 return locationManager;        
}  




- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UIApplication*    app = [UIApplication sharedApplication];
    // Request permission to run in the background. Provide an
    // expiration handler in case the task runs long.
    NSAssert(bgTask == UIBackgroundTaskInvalid, nil);
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        // Synchronize the cleanup call on the main thread in case
        // the task actually finishes at around the same time.
        dispatch_async(dispatch_get_main_queue(), ^{
        if (bgTask != UIBackgroundTaskInvalid)
        {
            [app endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;
        });
    }];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // Do the work associated with the task.
    // Synchronize the cleanup call on the main thread in case
    // the expiration handler is fired at the same time.
    dispatch_async(dispatch_get_main_queue(), ^{
        if (bgTask != UIBackgroundTaskInvalid)
        {
            [app endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;
        }
    });
});

}

  - (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation`  

{
    NSLog(@"location changed");
UIApplication* app = [UIApplication sharedApplication];

NSArray*    oldNotifications = [app scheduledLocalNotifications];

// Clear out the old notification before scheduling a new one.

if ([oldNotifications count] > 0)

    [app cancelAllLocalNotifications];

  // Create a new notification.

UILocalNotification* alarm = [[[UILocalNotification alloc] init] autorelease];

if (alarm)

{
     alarm.timeZone = [NSTimeZone defaultTimeZone];

    alarm.repeatInterval = 0;

    alarm.soundName = @"b.wav";

    alarm.alertBody = @"Location changed!";


    [app scheduleLocalNotification:alarm];

}

}