2011-08-08 122 views
0

我想根據位置特定事件來開發應用程序,在應用程序的後臺模式獲取當前位置,並生成,應用程序運行

那麼,如何才能讓應用進去的背景,並得到持續的位置。

回答

2

蘋果已經寫了一個演示應用程序做什麼是問:Breadcrumb

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]; 

} 

}