2014-03-13 75 views
0

我有一個應用程序設置爲監視進入區域。進入時,應用程序將通過本地通知提醒用戶。當應用程序終止時,背景位置跟蹤不起作用

這個工作正常,當應用程序是打開,或在後臺。但是,如果應用程序終止,區域監控永遠不會引發本地通知。

在info.plist中設置我的「背景模式」鍵。

難道這是因爲我的CLLocation代碼不在AppDelegate中(而是在單例中)?

難道這是因爲無法運行代碼來從終止狀態提高位置通知?

這裏是進入該地區時,我的代碼:

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { 

    UIApplication* app = [UIApplication sharedApplication]; 
    UILocalNotification* notifyAlarm = [[UILocalNotification alloc] init]; 

    notifyAlarm.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];; 
    notifyAlarm.timeZone = [NSTimeZone defaultTimeZone]; 
    notifyAlarm.repeatInterval =NSDayCalendarUnit; 
    notifyAlarm.alertBody = [Installation currentInstallation].reminderText; 

    [app scheduleLocalNotification:notifyAlarm]; 
} 

回答

0

有兩件事情發生: 一)如果應用程序出現更新時暫停,系統喚醒它在後臺處理更新。 b)如果應用程序啓動該服務,然後終止,系統將在新位置可用時自動重新啓動應用程序。

我們現在可以做的是打開重要的位置更新,當用戶點擊主鍵時,我們可以讓系統在需要時喚醒我們。

-(void) applicationDidEnterBackground:(UIApplication *) application 
{ 

    // You will also want to check if the user would like background location 
    // tracking and check that you are on a device that supports this feature. 
    // Also you will want to see if location services are enabled at all. 
    // All this code is stripped back to the bare bones to show the structure 
    // of what is needed. 

    [locationManager startMonitoringSignificantLocationChanges]; 
} 

然後爲了在應用程序啓動時切換到更高的精度,使用;

-(void) applicationDidBecomeActive:(UIApplication *) application 
{ 

     [locationManager stopMonitoringSignificantLocationChanges]; 
     [locationManager startUpdatingLocation]; 
} 

接下來,您可能需要更改位置經理委託來處理後臺位置更新。

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

    BOOL isInBackground = NO; 
    if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) 
    { 
     isInBackground = YES; 
    } 

    // Handle location updates as normal. 

    if (isInBackground) 
    { 
     // Do, if you have to send location to server, or what you need 
    } 
    else 
    { 
     // ... 
    } 
} 

請注意:背景中的位置監測將在電池使用情況下生效。

此代碼是從http://www.mindsizzlers.com/2011/07/ios-background-location/

+0

採取你真的應該歸功於羅傑是誰寫的這個代碼http://www.mindsizzlers.com/2011/07/ios-background-location/ – DefenestrationDay

+0

嘗試在iOS上10。在iOS或用戶強行殺死應用程序終止後不會喚醒應用程序。 –

相關問題