2014-01-09 46 views
2

我已經開始測試使用estimaotes作爲信標的iBeacons。iBeacon在後臺測距?

這一切都運行相當不錯,但我努力讓應用程序在後臺正常運行。

self.region = [[CLBeaconRegion alloc] initWithProximityUUID:self.uuid identifier: self.deviceID]; 
self.region.notifyEntryStateOnDisplay = YES; 
[self.locationManager startMonitoringForRegion:self.region]; 

所以這是基本的設置和我的測試應用程序我想顯示本地通知時,我的手機是在緊鄰的燈塔。我的問題是,它不會工作,除非我包括下面的行。

[self.locationManager startUpdatingLocation]; 

任何人都可以解釋爲什麼這是或如果我失去了一些關於iBeacons?

+0

嗨,你有關於startUpdatingLocation你的問題的答案嗎? – mm24

回答

3

你錯了。您無需調用startUpdatingLocation以在後臺調用。

當您在後臺時,輸入區域時需要更長時間才能收到通知。如果您想要測距呼叫,則還必須發出startRangingBeaconsInRegion調用。正如另一張海報所指出的那樣,當檢測到新的信標時,您將只能從背景中獲得幾秒鐘的測距呼叫。 (你會得到一個didEnterRegion,然後是幾個不等的電話,然後你的應用程序重新開始睡眠。)

+0

好的。謝謝。我試圖弄清楚是否有可能通過走廊跟蹤用戶的移動。從我現在明白了,這將是在不使用[的LocationManager startUpdatingLocation]不可能的,因爲應用程序需要在其他前臺運行得到範圍工作。正確? – Trj

+0

是的,你需要在後臺以獲得超過幾秒鐘燈塔爲呼叫運行。不過,我認爲startUpdatingLocation不會爲您帶來/保持您的前景。 –

+0

哎呀,我以前的評論應該是這樣寫的:「是的,你需要在前臺運行......」 –

1

不,你不會錯過任何東西。在後臺,您的應用只需很少的時間就可以完成測距。從我個人的經驗來看,你會得到大約3到5個不等的回調。而已。

+0

這不是我的問題的答案。爲什麼我需要最後一行代碼來使應用程序在後臺運行時顯示通知?我在想,我只需要[self.locationManager startMonitoringForRegion:self.region]; – Trj

1

你不需要調用startUpdatingLocation方法。

startMonitoringForRegion方法開始僅監視區域,並調用didStartMonitoringForRegion委託方法讓您知道信標何時進入/退出區域。

您需要調用startRangingBeaconsInRegion方法,該方法調用didRangeBeacons委託方法,該方法爲您提供帶有UUID,主要,次要和信標rssi信息的檢測信標數組。

對於後臺執行,只是使用UIBackgroundTaskIdentifier,你的代碼將在後臺工作爲好。

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    NSLog(@"=== DID ENTER BACKGROUND ==="); 
    UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 
      NSLog(@"End of tolerate time. Application should be suspended now if we do not ask more 'tolerance'"); 
     }]; 

    if (bgTask == UIBackgroundTaskInvalid) { 
     NSLog(@"This application does not support background mode"); 
    } 
    else { 
     //if application supports background mode, we'll see this log. 
     NSLog(@"Application will continue to run in background"); 
    } 
}