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

时间:2018-09-19 20:25:56

标签: android android-location locationmanager fusedlocationproviderapi android-fusedlocation

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

首先,请确保正确的位置已打开。看Settings.Secure.LOCATION_MODE_HIGH_ACCURACY,它比仅使用GPS具有明显优势。然后听一会儿位置,然后计算出得出最佳位置的结果。如果数字相差很大,也可以使用Activity Recognition API来检测用户是否在移动。编写此计算函数以获取最佳结果应该不难。

我对此不确定,但我真的认为等待几秒钟不会为您带来好处。以确保您可以简单地更改时间并观看结果。

答案 1 :(得分:0)

您可能要使用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)),然后运行需要位置的逻辑。我提供的链接也对此有很好的信息。

相关问题