Swift 如果未授予权限,位置更新后台任务在3分钟后终止。我们如何扩展这一点?

Swift 如果未授予权限,位置更新后台任务在3分钟后终止。我们如何扩展这一点?,swift,core-location,ios10,background-process,Swift,Core Location,Ios10,Background Process,我试图以预定义的时间间隔(即30分钟)获取用户位置,我已在后台模式下启用位置更新,出于测试目的,每次检测到位置时,我都会创建本地通知。如果互联网可用并且授予位置权限,则一切正常,但如果没有位置权限,则在3分钟后,应用程序在后台终止 我使用了以下方法,如果我遗漏了什么,请告诉我 1) 我还创建了后台任务,并在每150秒或更短的时间内使后台任务无效。在重新启动方法中,位置管理器是 func beginNewBackgroundTask() { var previousTas

我试图以预定义的时间间隔(即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) 在Restart方法中,如果已经授予权限,我将调用update location方法。如果未授予权限,我将再次调用initiate background task方法以保持应用程序运行,并发送用户通知

func restart ()
{

        if(CLLocationManager.authorizationStatus() == CLAuthorizationStatus.restricted ||           CLLocationManager.authorizationStatus() == CLAuthorizationStatus.denied )
        {
            self. beginNewBackgroundTask()
            self.scheduleNotification(Message:”Please enable Location”)
        }
        else
        {
            locationManager.startUpdatingLocation()
        }
}
如果应用程序没有位置权限,则不会创建新的后台任务,应用程序将在3分钟后在后台终止

如果没有位置权限,我们可以让应用程序在后台运行吗


奇怪的是,如果应用程序处于调试模式(附带mac),则会生成8-9分钟的通知,但如果没有调试模式,我只会错过3分钟的时间?或者,如果没有位置许可,我们不能让应用程序在后台运行超过3分钟

也许我误解了,但如果用户没有授予许可,允许这样做不是很粗鲁吗?是的,实际上你误解了,如果用户没有授予许可,我们需要向他显示本地通知,说明这一点“请启用您的位置”,应用程序旨在跟踪组织的销售人员,这就是为什么所有时间位置都是必要的。谢谢