本部分将介绍一些典型的位置信息收集场景,以及 Geofencing API 和 Fused Location Provider API 的最佳用法建议。
用户可见或前台更新
示例:需要频繁的准确更新且延迟极短的地图应用。所有更新都发生在前台:用户启动某个 Activity,使用位置数据,然后在短时间内停止该 Activity。
使用值为 PRIORITY_HIGH_ACCURACY 或 PRIORITY_BALANCED_POWER_ACCURACY 的 setPriority() 方法。
setIntervalMillis() 方法中指定的时间间隔取决于应用场景:对于实时场景,请将该值设置为几秒钟;否则,请限制为几分钟(建议大约两分钟或更长时间,以最大限度地减少电池用量)。
获知设备的位置信息
示例:天气应用想要知道设备的位置信息。
使用 getLastLocation() 方法,该方法会返回最近可用的位置信息(在极少数情况下可能为 null)。此方法提供了一种获取位置信息的简单方法,并且不会产生与主动请求位置信息更新相关的费用。与 isLocationAvailable() 方法结合使用,当 getLastLocation() 返回的位置信息足够新时,该方法会返回 true。
在用户位于特定位置时启动更新
示例:当用户距离工作地点、家或其他地点一定距离时,请求更新。
结合使用地理围栏更新和一体化位置信息提供程序更新。在应用收到地理围栏进入触发器时请求更新,并在应用收到地理围栏退出触发器时移除更新。这样可以确保应用仅在用户进入指定区域时获取更精细的位置信息更新。
此场景的典型工作流包括:在发生地理围栏进入 transition 事件时显示通知,以及在用户点按该通知时启动包含请求更新的代码的 Activity。
基于用户的活动状态启动更新
示例:仅在用户驾车或骑车时请求更新。
结合使用 运动状态识别 API 和一体化位置信息提供程序更新。在检测到目标 activity 时请求更新,并且在用户停止执行该 activity 时移除更新。
此用例的典型工作流包括:在检测到目标 activity 时显示通知,以及在用户点按该通知时启动包含请求更新的代码的 activity。
长期运行的后台位置信息更新与地理区域绑定
示例:用户希望在设备靠近零售商时收到通知。
这是一个很好的地理围栏用例。由于该用例几乎肯定会涉及后台位置信息,因此请使用 addGeofences(GeofencingRequest, PendingIntent) 方法。
您应设置以下配置选项:
如果您要跟踪停留转换,请使用
setLoiteringDelay()方法,并传递大约 5 分钟或更短的值。使用
setNotificationResponsiveness(),并传递大约 5 分钟的值。但是,如果您的应用可管理更久的响应延迟,您可以考虑传递一个大约 10 分钟的值。
一个应用一次最多只能注册 100 个地理围栏。在应用想要跟踪大量零售商选项的用例中,应用可能需要注册大型地理围栏(在城市级别),并为大型地理围栏内的商店动态注册较小的地理围栏(针对城市内的位置)。当用户进入大型地理围栏时,添加较小的地理围栏;当用户离开大型地理围栏时,移除较小的地理围栏,并为新区域重新注册地理围栏。
长期运行的后台位置信息更新(无可见应用组件)
示例:被动追踪位置的应用
请尽可能将 setPriority() 方法与 PRIORITY_PASSIVE 选项搭配使用,因为这样几乎不会消耗电池电量。如果无法使用 PRIORITY_PASSIVE,请使用 PRIORITY_BALANCED_POWER_ACCURACY 或 PRIORITY_LOW_POWER,但请避免使用 PRIORITY_HIGH_ACCURACY 执行持续的后台工作,因为此选项会大量消耗电池电量。
如果您需要更多位置数据,请使用被动位置信息,方法是调用 setMinUpdateIntervalMillis() 方法,并传入比您传递给 setIntervalMillis() 的值更小的值。与 PRIORITY_PASSIVE 选项结合使用时,被动位置信息可以伺机提供由其他应用计算的位置信息,而无需额外付费。
使用 setMaxUpdateDelayMillis() 方法添加一些延迟时间,以调节频率。例如,如果您使用 setIntervalMillis() 方法,且值约为 10 分钟,则应考虑调用 setMaxUpdateDelayMillis(),且值介于 30 到 60 分钟之间。使用这些选项时,系统大约每 10 分钟为您的应用计算一次位置信息,但每 30 到 60 分钟才唤醒应用一次,并以批量更新的形式提供一些位置数据。这种方法会牺牲延迟时间,以换取更多可用数据和更出色的电池性能。
在用户与其他应用互动时频繁进行高精度更新
示例:当用户关闭屏幕或打开其他应用时,导航或健身应用仍会继续运行。
使用前台服务。如果您的应用可能会代表用户执行耗费资源的工作,建议的最佳做法是让用户了解该工作。前台服务需要持久性通知。如需了解详情,请参阅通知概览。