在背景中计数(NSTimer超过3分钟)

时间:2016-02-10 10:45:07

标签: ios timer nstimer ibeacon background-task

有没有办法在后台运行NSTimer超过3分钟? 我必须创建使用

的简单应用程序
 `locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion)`

扫描我的信标。当我需要检查用户是否距离最近的信标10秒时,我遇到了问题。我创建了

    var timer: NSTimer?
    var lastClosestBeacon: CLBeacon? {
        didSet {
            timer?.invalidate()
            timer = NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: "showLocalNotification", userInfo: nil, repeats: false)
//            NSRunLoop.mainRunLoop().addTimer(timer!, forMode: NSDefaultRunLoopMode)
        }
    }

当最近的信标更改时,设置了lastClosestBeacon并安排了计时器。当用户在Scheduled NSTimer when app is in background?的帮助下进入后台(锁定电话等)时,它正在App中工作3分钟 有没有可能检查超过3分钟?

PS。我已经添加了带位置更新的后台模式。

2 个答案:

答案 0 :(得分:4)

您可以按照以下方式执行此操作:

1)首先在Info.plist中包含所需的背景模式键

2)检查并添加以下代码行,以便在iOS 9中添加位置管理器的后台工作(更新:也适用于iOS 10):

std::move()

3)然后创建一个新的计时器,每1秒连续重复一次。

4)在那个计时器方法中添加这两行代码。

f(std::move(i));

这使您的应用在后台运行超过3分钟。需要注意的是,电池使用量可能很高。

答案 1 :(得分:3)

从iOS 9开始,根据请求,应用程序允许最多180秒(3分钟)的后台执行时间。 如果您将位置更新置于Info.plist中的“必需后台模式”,则可以无限延长。我已经确认这样做可以让后台执行永远运行。但是,在将您的应用程序放入App Store之前,需要您在Info.plist中使用此功能才能获得Apple的批准。

如果您不想要请求位置后台模式,还有一些其他技巧可以解决Apple的限制,您可以在此处阅读:{ {3}}

关于使用这些技巧的注意事项 - 它们可能会在任何iOS升级中发生变化,使用它们可能会使评论者拒绝您的应用。