位置更新后台任务在3分钟后终止,如果未授予权限。我们怎么能延伸呢?

时间:2017-01-19 13:03:57

标签: swift core-location ios10 background-process

我正在尝试以预定义的时间间隔(即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分钟

0 个答案:

没有答案