2016-04-27 66 views
0

我有一個swift中的程序,用於檢測信標何時處於範圍內且超出範圍,即使應用程序處於後臺。
我遇到的問題是didExitRegion需要大約30秒纔會觸發。我知道這30秒是一個不可調整的值,但對於我的應用程序來說,30秒是遠離燈塔以獲取通知的很長一段路。我還有什麼其他的選擇來解決這個問題?
當應用程序處於後臺時,是否有可能監視某個Major值,並將它假設爲10秒作爲誤報,如果仍然沒有看到主要值,那麼我知道我超出範圍? 如果答案是肯定的,任何示例顯示如何監視主要價值?在監控ibeacon時替代didexitregion

回答

1

另一種方法是做燈塔範圍,並創建自己的退出事件,當你在該地區沒有看到任何信標在一個較短的時間段,比如說10秒。

然而,有很大的侷限性,以這樣做:

在iOS上的背景,你只能範圍標爲區域項事件之後在有限的時間段,或者應用程序後,被推倒在背景。默認情況下,這隻有5秒,但它可以是extended up to 3 minutes programatically。在那三分鐘之後,你將不會有更多的回調,所以如果你在那個時候還沒有發現10秒的退出,那麼你將不得不依賴於常規的didExitRegion事件。

如果您使用這種技術,您需要認識到,iOS尚未檢測到信號後,仍會報告信標存在一段時間,其接近UNKNOWN。

這裏是如何做到這一點在你的範圍回調的例子:

var lastBeaconDetectionTime = 0.0 
var exitFired = false 

func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) { 
    for beacon in beacons { 
    if beacon.proximity != CLProximity.Unknown { 
     lastBeaconDetectionTime = NSDate().timeIntervalSince1970 
     exitFired = false 
    } 
    } 
    if NSDate().timeIntervalSince1970 - lastBeaconDetectionTime > 10.0 && !exitFired { 
    exitFired = true 
    // TODO: Add logic for region exit firing after 10 seconds 
    } 
} 
+0

謝謝,這聽起來像一個很好的解決方案 – borna

相關問題