首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 2信标后台扫描

Swift 2信标后台扫描
EN

Stack Overflow用户
提问于 2016-08-24 04:12:45
回答 1查看 768关注 0票数 0

我正在尝试在我的应用程序中运行信标背景检测。我为此创建了一个专用类,并在我的ViewController中启动它:

代码语言:javascript
复制
    override func viewDidLoad() {
      super.viewDidLoad()
      beaconSharedInstance
      ....
    }

下面是我的类的代码:

代码语言:javascript
复制
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)")
    }


}

}

这个类在前台工作得很好,但是一旦我的应用程序变得不活动,我就可以在日志文件中看到:

代码语言:javascript
复制
Ending background task

然后CLLocatioManager停止..。

我在项目的后台模式中设置了位置更新,并在info.plist文件中设置了NSLocationAlwaysUsageDescription,但我仍然有相同的行为,当应用程序处于非活动状态时,我的线程会停止。

我还尝试这样启动我的Thread:

代码语言:javascript
复制
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从不starts...any的想法?

EN

回答 1

Stack Overflow用户

发布于 2016-08-24 04:44:26

后台任务需要有一个循环,否则它将直接退出。尝试:

代码语言:javascript
复制
dispatch_async(backgroundQueue, {
    print("Running beacon detection in the background queue")
    beaconSharedInstance
    while(true) {
      NSThread.sleepForTineInterval(1)
      print("running...")
    }
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39109919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档