我为 Gps、Wifi 和 Fused Location Provider 制作了一个测试应用程序并测试了 2 天。它更好,因为它同时使用了它们,而且大多数时候它是最准确的一个。此外,Gps 数据是一个非常嘈杂的数据,会导致抖动,解决此低通滤波器或使用其他滤波器。用于获得最准确结果的最成功的滤波器之一是卡尔曼滤波器。 FusedLocationProvider 使用这个过滤器,就像 RotationVector 一样,它是一个融合了硬件和软件的传感器。 RotationVector 使用加速度计、陀螺仪(如果有)和磁场传感器来获取和过滤位置和方位角数据。
Location.getProvider for Gps with LocationManager 返回“gps”,Wifi 返回“network”,FusedLocationProvider 返回“fused”。
当 GPS 关闭并且我将优先级设置为 HIGH 时,这是否意味着 GPS 将自动开启,或者不自动开启
如果可用,除“电池节省”之外的任何其他操作都会打开 Gps。此设置在我的 Android 7.1.1 手机上可用。用户端的位置设置在以前版本的 Android 上有所不同。作为开发者启用 Gps 你应该设置mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
PRIORITY_HIGH_ACCURACY - 使用此设置请求最精确的位置。使用此设置,定位服务更有可能使用 GPS 来确定位置。
设置优先级也决定了电池使用水平。
我可以根据需要将 UpdateLocation 设置为具有高优先级的 Fused 提供程序以至少节省一点电池吗?
是的,除了优先级之外,您还可以设置位置请求的间隔。
mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
我如何知道 Fused 提供商正在使用什么(是 GPS 还是网络提供商)?
Location.hasSpeed() 的 Wifi 定位永远不会返回 true,但如果您在户外,Gps 几乎总是返回 true。 location.getExtras() 也有卫星标签,您可以检查仅适用于 Gps 的卫星。如果您正在步行,或者到目前为止我已经阅读过,我还没有在汽车上尝试过,当速度低于 5 公里/小时时,它不是很准确。我的意思是,如果您使用 FLP 并且最后的位置数据包含速度信息,那么它肯定来自 Gps。
有什么不好的地方吗?
从 Android 8.0 及更高版本开始,如果您不使用前台服务或在前台获取位置,而 FLP 和 LocationManager 都没有暂停应用程序,则有 location retrieving limit。
FLP 还要求 GooglePlayService 在用户的设备上可用,并且它应该高于特定版本。 10 或 11 取决于您使用哪一个。如果您希望在禁止 Google Play 服务的国家/地区(例如中国)发布您的应用程序,这可能会很麻烦。