【发布时间】:2016-08-23 20:12:44
【问题描述】:
我正在尝试在我的应用中运行信标背景检测。 我为此创建了一个专用类并在我的 ViewController 中启动它:
override func viewDidLoad() {
super.viewDidLoad()
beaconSharedInstance
....
}
这是我班级的代码:
let beaconSharedInstance = iBeacon();
class iBeacon: NSObject, UIApplicationDelegate, CLLocationManagerDelegate {
var locationManager: CLLocationManager!
var beaconRegion:CLBeaconRegion!
override init(){
super.init()
let uuidString = "FDA50693-A4E2-4FB1-AFCF-C6EB07640978"
let beaconIdentifier = "uby-06B524"
let beaconUUID:NSUUID = NSUUID(UUIDString: uuidString)!
beaconRegion = CLBeaconRegion(proximityUUID: beaconUUID, identifier: beaconIdentifier)
locationManager = CLLocationManager()
locationManager.delegate = self
if(CLLocationManager.authorizationStatus() != CLAuthorizationStatus.AuthorizedAlways){
locationManager.requestAlwaysAuthorization()
}
locationManager.allowsBackgroundLocationUpdates = true
locationManager!.startRangingBeaconsInRegion(beaconRegion)
}
func locationManager(manager: CLLocationManager,
didRangeBeacons beacons: [CLBeacon],
inRegion region: CLBeaconRegion) {
print("didRangeBeacons");
if(beacons.count > 0) {
print("Discovered beacon \(beacons[0].rssi) dBM name: \(beacons[0].proximityUUID)")
}
}
}
这个类在前台运行良好,但是一旦我的应用程序变为非活动状态,我就可以在日志文件中看到:
Ending background task
然后 CLLocatioManager 停止...
我在我的项目的后台模式中设置了位置更新,并在我的 info.plist 文件中设置了 NSLocationAlwaysUsageDescription,但我仍然有相同的行为,当应用程序处于非活动状态时我的线程停止。
我也尝试像这样启动我的线程:
let qualityOfServiceClass = DISPATCH_QUEUE_PRIORITY_DEFAULT
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
print("Running beacon detection in the background queue")
beaconSharedInstance
})
但在那种情况下 CLLocationManager 永远不会启动...有什么想法吗?
【问题讨论】:
-
“结束后台任务”日志从何而来?你在用
beginBackgroundTaskWithExoirariinHandler吗?