如何最准确地确定 Android 设备的位置?

Posted

技术标签:

【中文标题】如何最准确地确定 Android 设备的位置?【英文标题】:How to most accurately determine the location of an Android device? 【发布时间】:2019-02-24 02:12:29 【问题描述】:

我正在构建一个应该能够报告用户确切位置的应用程序。只需要一个位置,即我不需要连续跟踪设备。

我希望位置尽可能准确,可以稍等片刻以确定位置(最多 1-2 分钟)。

我一直在查看FusedLocationProviderClient.getLastLocation(),但由于我希望位置尽可能准确和更新,因此它不符合我的需求。

所以我开始考虑改用FusedLocationProviderClient.requestLocationUpdates(),这似乎是一个更好的选择。

但我不确定如何最好地配置我的LocationRequest 以获得尽可能好的准确性。例如,使用setNumUpdates() 会更好,这样我只收到一个更新并将其用作我的位置,还是应该接收多个更新以希望获得更好的准确性(例如,GPS 锁定到更多卫星)?我在想,如果我使用第二种方法,我可以从每个位置更新中查看getAccuracy() 的值,并且只保留最准确的那个。不利的一面是,如果设备正在移动并且我持续接收更新一分钟左右,则第一个位置可能具有最高的准确度,但由于它已有一分钟的历史,因此不再准确。

如上所述,我只需要一个高度准确的位置,如果需要,应用程序可以等待 1-2 分钟。在这种情况下,最好的方法是什么?

【问题讨论】:

让它不断更新会增加您获得准确位置的机会,但不能保证。什么被认为是“准确的位置”?如果由于您无法控制的因素而无法获得准确的位置会发生什么,即。不是在一个可以买到好的卫星锁的地方吗?硬件不好或根本不工作的设备怎么办?关闭位置权限的用户怎么办?这些都是你需要考虑的因素 【参考方案1】:

首先,确保准确的位置已开启。看看Settings.Secure.LOCATION_MODE_HIGH_ACCURACY,它比只使用 GPS 有明显的优势。然后听一段时间的位置并计算你得到的结果以找出最佳位置。如果数字相差很大或使用Activity Recognition API,您还可以检测用户是否正在移动。编写此计算函数以获得最佳结果应该不难。

我不确定这一点,但我真的不认为等待超过几秒钟会给你带来优势。确保您可以简单地更改这个时间并观察结果。

【讨论】:

【参考方案2】:

您可能想要使用 LocationManager。根据我的经验,FusedLocation 确实会看起来更快锁定,但总体上可能不准确,或者至少在一段时间内不准确。我有一个应用程序,它也需要非常准确的坐标。我的默认设置是使用基于 LocationManager 的方法,但如果用户想要更快的锁定(比如在室内),他们可以切换到 FusedLocation 提供程序。

这是一个很好的概述https://developer.android.com/guide/topics/location/strategies

对于请求更新时的提供者,我会使用 LocationManager.GPS_PROVIDER。锁定需要更长的时间,因为它将等待卫星并且不使用 Wifi 或其他信号塔。但你说没关系。类似的东西

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, YourLocationListener);

一旦您开始通过听众的onLocationChanged() 获取位置更新,您就可以开始检查位置的准确性、上次位置更改后的移动等,以尝试评估 GPS 接收器是否仍在某个位置上。一旦您对修复的质量感到满意,您就可以停止接收位置更新 (locationManager.removeUpdates(YourLocationListener)),然后运行需要该位置的逻辑。我提供的链接也有很好的信息。

【讨论】:

以上是关于如何最准确地确定 Android 设备的位置?的主要内容,如果未能解决你的问题,请参考以下文章

AR ANDROID的室内位置映射

确定位置的最准确方法

Android 最准确的 Location API

网络位置提供商是不是需要互联网来确定位置?

确定移动网站用户的位置

Android GPS 位置与其他 GPS 设备