2015-04-28 44 views
2

我正在處理監視CLBeaconRegion並在用戶進入/退出區域時向用戶顯示本地通知的應用程序。一切工作正常,但測試時,我發現如果我進入區域,接到調用locationManager:didEnterRegion:然後關閉傳輸信標,我得到了locationManager:didExitRegion的調用:僅在2分鐘左右。locationManager:didExitRegion:發送停止時發生大的延遲

任何人都可以幫助避免這種延遲?

傳輸設備是iOS 4的iPhone 4s。接收設備是iPhone 4s與iOS 7.1.2

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    ... 
    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 
    if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { 
     [self.locationManager requestAlwaysAuthorization]; 
    } 
    [self.locationManager startMonitoringForRegion:beaconRegion]; 
    ... 
} 


- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 
{ 
    NSLog(@"%@", NSStringFromSelector(_cmd)); 
} 

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region 
{ 
    NSLog(@"%@", NSStringFromSelector(_cmd)); 
} 

謝謝!

回答

4

當一個應用程序在4S的背景中(或者如果它位於前景而不是測距),可能需要15分鐘才能獲得didEnterRegion回調。 A didExitRegion回調可能需要15分鐘和3秒。

爲什麼?由於4S僅在背景中每15分鐘掃描一次信標以節省電量。只有3秒沒有看到燈塔,你會得到一個didExitRegion事件。

看到這裏的細節:http://developer.radiusnetworks.com/2014/03/12/ios7-1-background-detection-times.html

編輯:你可以讓你的設備通過啓用範圍在相同啓用監控更快速檢測的前景。只需撥打startRangingBeaconsInRegion:你打電話後startMonitoringBeaconsInRegion:

較新的iOS設備iPhone 5+有硬件協助,掃描不斷在後臺和前臺的時候不廣泛,但對於這種協助插槽是有限的。只有前30個註冊區域可以訪問這個快速背景檢測,並且這在4S上不可用。

+0

但是應用程序正在運行在測試目的前臺。 – Huralnyk

+0

請參閱我編輯的答案。如果您正在監控但未測量,則該問題也適用於前景。 – davidgyoung

+0

非常感謝,男士! – Huralnyk