有没有办法在后台运行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。我已经添加了带位置更新的后台模式。
答案 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升级中发生变化,使用它们可能会使评论者拒绝您的应用。