我需要跟踪用户何时出行。为此,我设置了CLLocationManager,如下所示:
self.locationManager.requestAlwaysAuthorization()
self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
self.locationManager.distanceFilter = 200
self.locationManager.pausesLocationUpdatesAutomatically = false
self.locationManager.allowsBackgroundLocationUpdates = true
self.locationManager.activityType = .other
所以我的应用程序即使没有运行也会获取位置,将位置保存在数据库中并再次进入后台。稍后,当用户启动应用程序时,将从数据库中的新位置提取行程。
这或多或少的能耗约为15%。该位置是在手机信号塔的帮助下确定的,而不是通过gps确定的。
我意识到在某些日子里,跟踪不适用于某些地区(火车轨道)。你知道为什么会这样吗? (仅限iOS10设备)。
您是否看到了改进以实现我的目标?还有什么可以用来确定旅行吗? (旅行时间超过15公里/小时且超过15分钟)。
由于
答案 0 :(得分:1)
可以有多种活动类型,可以帮助您找到曲目,船只等。以下是活动类型的苹果文档:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_app_icon"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_app_icon"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".activities.HomeActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
</activity>
您可以使用public enum CLActivityType : Int {
case other
case automotiveNavigation // for automotive navigation
case fitness // includes any pedestrian activities
case otherNavigation // for other navigation cases (excluding pedestrian navigation), e.g. navigation for boats, trains, or planes
}
答案 1 :(得分:0)
使用iOS 12
,您还可以使用新的活动类型来监视位置:
”如果预期的用户活动远高于此活动,则使用此活动类型 地面。”
CLActivityType.airborne
如Apple在参考文献中所建议的:https://developer.apple.com/documentation/corelocation/clactivitytype/airborne