2014-01-21 49 views
2

在iOS上,在我的應用程序委託中,我開始區域監視,只要進入信標區域,就使用locationManager:didRangeBeacons:inRegion啓動測距邏輯。根據Apple文檔,只有當區域在範圍內或超出範圍或範圍發生變化時才應調用此方法。測距信標間隔

我的問題是,只要我在區域內,我就會每秒接到一次這個方法的調用。如何減少調用這個方法的次數,同時還在測量範圍內?

回答

1

根據該文檔:

「每當信標來在範圍內或超出範圍的位置管理器調用該方法的位置管理器還調用此方法時的信標變化的範圍內;例如,當燈塔靠近時「。

可能發生的情況是範圍稍微有所變化,這會導致您描述的行爲。

爲什麼這是一個問題

編輯:

你會得到通知通過應用程序的委託方法進入區域的背景:

- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region{} 

你可以用它來確定狀態:

if(state == CLRegionStateInside) 
{ 
    //Inside a region: 
} 
else if(state == CLRegionStateOutside) 
{ 
    //Outside a region 
} 
else { 
    //Something else 
} 

你可以用它來收集有限量的信息或提示用戶通過本地通知加載應用程序。當您的應用程序恢復時,您可以通過locationManager收集更多信息。

+0

我想要在後臺處理測距。當用戶進入信標範圍時,我想獲取關於信標的詳細信息 - 並且這種情況發生在這種方法中。我對近距離信息不感興趣,所以這就是爲什麼我不希望這種方法被稱爲如此之多。我還看到,測距需要比區域監測更多的功率,這可能會消耗用戶電池。 –

+0

已編輯答案 – CW0007007

6

locationManager:didRangeBeacons:inRegion被稱爲每秒一次,無論如何。每次調用時,beacons參數將包含應用程序當前可以看到的所有信標的數組,按照鄰近程度排序。無法限制調用此方法的頻率,因此無法停止測距。

監測地區(而不是測距),您的應用程序將有didEnterRegion:didExitRegion調用,didDetermineState:一起。請參閱this answer瞭解更多細節。

+0

有沒有辦法僅使用區域信息獲取信標信息(基本上,要在後臺獲取信標信息)? –

+0

當'didEnterRegion:'被調用時,您似乎可以調用'startRangingBeaconsInRegion:',但該應用只會在非常短的時間內喚醒。不建議在後臺嘗試做這件事。 –