iOS 8 中的定位服务进入“非活动”状态
Posted
技术标签:
【中文标题】iOS 8 中的定位服务进入“非活动”状态【英文标题】:Location service going to “Inactive” state in iOS 8 【发布时间】:2015-03-18 05:14:14 【问题描述】:我正在创建一个跟踪用户的应用程序。当用户登录应用程序时,我已经开始了重要的位置更新。然后我把我的应用程序放在后台。然后开始用我的车旅行。 500m-1km 后,我的位置发生了显着变化。在获取更新时,我已经停止了重要的位置更新并启动了标准 GPS。它会在 2-3 分钟后更新 m 个位置,然后我看到这个 “位置图标现在应该处于“非活动”状态”,我的应用没有获得任何位置更新。
如果应用处于前台,则应用再次开始获取位置更新。
我正在使用共享位置实例。我有 iPhone 5 和 ios 8.1.3。我正在使用 Swift。
添加一些代码..我已经这样做了
gpsManager = CLLocationManager()
gpsManager.delegate = self
gpsManager.desiredAccuracy = kaccuracy
gpsManager.distanceFilter = kdistanceFilter
gpsManager.pausesLocationUpdatesAutomatically = false
gpsManager.headingFilter = kheadingFilter
gpsManager.activityType = kactivityType
isTracking = false
isMonitoringSignificantChanges = false
//on login
var sharedGPSManager=GeoLocation.sharedInstance
sharedGPSManager.delegate=self
let status=sharedGPSManager.authorizationStatus()
if(status == 0)
NSLog("Allowed to track")
else
NSLog("Not allowed")
sharedGPSManager.startSignificantLocationTracking()
func gpsManager(manager:GeoLocation, didUpdateLocations locations:AnyObject)
var sharedGPSManager=GeoLocation.sharedInstance
sharedGPSManager.stopSignificantLocationTracking()
task=UIApplication.sharedApplication().beginBackgroundTaskWithName("wifiUpload", expirationHandler: () -> Void in
sharedGPSManager.delegate = self
let status = sharedGPSManager.authorizationStatus()
if(status == 0)
NSLog("Allowed to track")
else
NSLog("Not allowed")
sharedGPSManager.startTracking()
//process location data
endBackgroundTask(task)
// 开始位置跟踪 func startTracking()
if(isMonitoringSignificantChanges)
gpsManager.stopMonitoringSignificantLocationChanges()
gpsManager.stopUpdatingLocation()
if CLLocationManager.headingAvailable()
gpsManager.startUpdatingHeading()
gpsManager.startUpdatingLocation()
isTracking=true
isMonitoringSignificantChanges=false
【问题讨论】:
如果您希望位置管理器永远收听,请打开应用功能以在后台接收位置 不要分心,不要闲聊(阅读help→tour):乞求,谢谢,你的名字永远不应该成为一个好问题的一部分。 您能否分享一些您在后台收到第一个位置后所做的代码。我猜你自己关闭了定位服务 当我收到第一次位置更新时,我会停止重要的位置服务并启动标准位置服务,如代码所示 【参考方案1】:最后我在 Apple 开发者论坛上得到了答案。保持重要的位置总是对我有用....
【讨论】:
【参考方案2】:需要在后台模式下添加Location Update
能力
Project Target > Capabilities > Turn Background mode ON > 勾选所有适用于您的应用的选项
【讨论】:
我已经在后台模式下启用了位置更新。我还在 plist 中添加了 NSLocationAlwaysUsageDescription。还是不行【参考方案3】:您必须在 info.plist 中将必需的后台模式启用为“应用程序注册位置更新”,然后您的应用程序将在后台为您提供位置更新。
您必须使用self.locationManager.startUpdatingLocation()
而不是重要的位置更新。
【讨论】:
我想从重要位置切换到标准位置服务。我在后台调用了 startUpdatingLocation。仍然面临问题 您的代码看起来是正确的,但您为什么要使用 MonitoringSignificantLocationChanges 我需要实现自动启动功能。否则,如果 GPS 始终开启,电池将耗尽。如果 GPS 在前台启动,则工作正常 如果您在后台模式下使用定位,您必须使用实时定位服务,否则苹果会拒绝您的申请。所以我建议你使用 self.locationManager.startUpdatingLocation() 方法。 如果您需要更多帮助,我们可以聊天。以上是关于iOS 8 中的定位服务进入“非活动”状态的主要内容,如果未能解决你的问题,请参考以下文章
GCM 使用 content_available 向 iOS 推送通知(无法从非活动状态调用)