oca*_*nal 23 core-location cllocationmanager ios swift
我创建了一个简单的应用程序,它可以跟踪用户位置,并在每次更新位置时创建本地通知.
我启用了下面的背景模式,
let locationManager = CLLocationManager()
open override func viewDidLoad() {
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = 10
locationManager.allowsBackgroundLocationUpdates = true
locationManager.startUpdatingLocation()
}
open func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let notification = UILocalNotification()
notification.alertBody = "location updated"
notification.fireDate = Date()
UIApplication.shared.scheduleLocalNotification(notification)
}
Run Code Online (Sandbox Code Playgroud)
我设置字符串NSLocationAlwaysUsageDescription并请求许可.用户授予第一次加载应用时始终使用的权限.
当应用程序处于前台时它运行良好,当背景仍然工作至少在5-40分钟的时间范围内,可以通过电池或其他打开的应用程序进行更改.
问题是为什么它停止工作,它不会继续工作?
我从未在Apple文档中看到时间限制.
Vim*_*din 24
当应用移动到后台时切换到重要的位置更新.如果应用程序无限期地在后台保持活动状态,iOS将卸载该应用程序.
locationManager.pausesLocationUpdatesAutomatically = false
Run Code Online (Sandbox Code Playgroud)
设置desiredAccuracy位置管理器对象的属性
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
Run Code Online (Sandbox Code Playgroud)
您可以使用CLLocationAccuracy常量之一
重要
默认情况下,iOS设备上的标准位置更新以最佳准确性级别运行。更改这些设置以符合您的应用程序的要求。否则,您的应用程序将不必要地浪费能量。
将pausesLocationUpdatesAutomatically位置管理器对象的属性设置为true
self.locationManager.pausesLocationUpdatesAutomatically = true
Run Code Online (Sandbox Code Playgroud)
重要
对于具有使用中授权的应用,暂停位置更新会终止对位置更改的访问,直到再次启动该应用并能够重新启动这些更新。如果您不希望位置更新完全停止,请考虑禁用此属性并将位置精度更改为
kCLLocationAccuracyThreeKilometers应用程序移至后台。这样做可以使您继续以省电的方式接收位置更新。
将allowsBackgroundLocationUpdates位置管理器对象的属性设置为true
self.locationManager.allowsBackgroundLocationUpdates = true
Run Code Online (Sandbox Code Playgroud)
希望在挂起时接收位置更新的应用程序必须在其应用程序的Info.plist文件中包含UIBackgroundModes键(具有位置值),并将此属性的值设置为true。进行后台更新时,需要使用带有位置值的UIBackgroundModes键
设置activityType属性以让Core Location知道您的应用在给定时间执行的位置活动类型
self.locationManager.activityType = .automotiveNavigation
Run Code Online (Sandbox Code Playgroud)
您可以使用其中一种CLActivityType情况
在具有GPS硬件的受支持设备上,您可以让位置管理器在您的应用程序在后台运行时推迟位置更新的交付。例如,跟踪用户在远足径上位置的健身应用可以将更新推迟到用户移动一定距离或经过一定时间后再进行。
| 归档时间: |
|
| 查看次数: |
11144 次 |
| 最近记录: |