我正在尝试以预定义的时间间隔(即30分钟)获取用户位置,我已在后台模式中启用位置更新,为了测试目的,每次检测到位置时我都会创建本地通知。如果互联网可用,授予位置权限,然后一切正常,但如果没有位置权限,则3分钟后应用程序在后台终止。
我使用了以下方法,如果我遗漏了任何内容,请告诉我吗?
1)我还创建了后台任务,并在每150秒或更短的时间内使后台任务无效。在重新启动方法中,位置管理器是
func beginNewBackgroundTask()
{
var previousTaskId = currentBgTaskId;
currentBgTaskId = UIApplication.shared.beginBackgroundTask(expirationHandler:
{
})
if let taskId = previousTaskId{
UIApplication.shared.endBackgroundTask(taskId)
previousTaskId = UIBackgroundTaskInvalid
}
timer = Timer.scheduledTimer(timeInterval: BackgroundLocationManager.BACKGROUND_TIMER, target: self, selector: #selector(self.restart),userInfo: nil, repeats: false)
}
2)在重启方法中我调用更新位置方法,如果已经授予权限,并且如果未授予权限,那么我将再次调用启动后台任务方法以保持应用程序运行,并发送用户通知。
func restart ()
{
if(CLLocationManager.authorizationStatus() == CLAuthorizationStatus.restricted || CLLocationManager.authorizationStatus() == CLAuthorizationStatus.denied )
{
self. beginNewBackgroundTask()
self.scheduleNotification(Message:”Please enable Location”)
}
else
{
locationManager.startUpdatingLocation()
}
}
如果app没有位置权限,则表示未创建新的后台任务,3分钟后应用将在后台终止。
如果没有位置权限,我们可以让应用在后台运行吗?
奇怪的事情,如果应用程序处于调试模式(附加mac),则生成通知8 - 9分钟,但没有调试模式仅3分钟我错过了什么?或者,如果没有位置许可,我们无法让应用程序在后台运行超过3分钟