2016-02-06 130 views
2
背景測距

我目前正試圖找到一種方法,通過使用位置監控範圍在iOS上的背景標,然後觸發測距,像這樣:燈塔在iOS上

func locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion) { 
    if (state == .Inside) { 
     locationManager.startRangingBeaconsInRegion((region as? CLBeaconRegion)!) 
    } 
} 

我再試圖讓API調用信標幀範圍

func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) { 
     for beacon in beacons { 
      let minor = beacon.minor as Int 
      let major = beacon.major as Int 
      do { 
       try APICall.canSeeBeacons(major, minor: minor) 
      } catch { 
       print("Error making API call") 
      } 
     } 
    } 

然而這僅適用於約十分鐘,而手機是在後臺進行,十幾分鍾後,它不再工作,但我希望做它是連續的,以便在發現信標時始終可以進行API調用。我也有權限設置正確的鑰匙,我對我的LocationManager

+0

您是否嘗試將單個信標放置超過十分鐘或者在10分鐘後沒有進入區域進入/退出事件時遇到問題? – Paulw11

+0

@ Paulw11它只是區域入口,我需要應用程序在檢測到附近的信標時撥打電話 – HarryMoy

+0

什麼班級持有您的位置管理員?應用程序委託或視圖控制器? – Paulw11

回答

1

使用requestAlwaysAuthorization()採取在蘋果的iOS開發圖書館有關背景處決一看: https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

如果類型的應用程序是所接受的類型的較長的背景處決之一,添加密鑰Required background modes到您Info.plist與陣列,含有所述啓用類型中的一種或多種:audiolocationvoipnewsstand-contentexternal-accessory和/或bluetooth-central

請注意,在App Store上發佈您的應用程序之前,Apple會對此進行審覈。

編輯:

我沒有使用這一段時間,但現在測試,現在看來,這更簡單了,因爲Xcode的6 以下步驟:

添加關鍵Required background modesInfo.plist

2.轉到Capabilities enter image description here

3.選擇適合的背景模式。 enter image description here

+0

我已經在所需的背景模式下設置了info.plist中的所有設置,但它仍然存在十分鐘後沒有做任何事情的問題 – HarryMoy

+0

你見過我編輯過答案?此外,在10分鐘後,它將繼續在後臺直到任務正在運行,然後可以暫停。例如,如果它在某個時候不再監視當前位置或不再播放音樂等。 –

0

我有同樣的問題。正如評論員所說,我已將位置管理器委託方法移入App Delegate。而且我還加了這個:

locationManager.allowsBackgroundLocationUpdates = true 
locationManager.pausesLocationUpdatesAutomatically = false 

它的工作原理。