我想在我的应用中使用精美的GPS位置。所以我遵循了一个简单的教程(LocationManager的基本用法,显式注册GPS提供商,要求更新0毫秒,0米)并创建一个应用程序。我对更新的准确性和速度印象不深。速度很慢,精度最高为24米,但平均为96。
在同一部手机上,我在同一地点广为人知GPS STATUS。我很惊讶地看到修复的准确性。 4-6米,始终如一。
所以我关闭GPS状态并运行我的应用程序 - 我看到准确度为6米,但几秒钟之后它是24,56,90,128 ......并且在96左右波动。
现在,我想知道:这怎么可能?是否有提高准确性的技巧?!!
有没有人有好的例子/教程?
它无济于事
让我再说一遍:我得到并打印所有更新。所以我看到一系列精确的位置。
我看到波动,我看到最好的结果,它永远不会比12米好。
现在在同一地点,我开始GPS状态=>我看到准确度达到4米!
首先我想:哈,GPS STatus作弊,只是精确度
但似乎并非如此,因为当我打开我的应用程序并获得最后的知名度时,它确实是准确度为4的那个!
开始降级到最佳情况12。
总结:相同的条件,相同的条件,不同的应用=>精度不同!
所以我的问题:有什么技巧吗?任何额外的命令?任何特殊功率设置?与“你有多重要”有任何关系吗?
与:Android GPS. Location Listener does not want to acquire a fix :(
相关答案 0 :(得分:1)
https://developers.google.com/events/io/sessions/324498944
您应该查看它,看看如何最小化您的代码。
请注意,它需要设备才能使用Play商店应用程序。
与使用普通位置传感器(电池,速度,精度等)相比,这种方法有许多优点
答案 1 :(得分:0)
使用GnssMeasurement可以获得最佳精度,但是很难编写代码。 Android 7+,我让Doodgee拍摄了双重照片(非常不流行的中国智能手机)并且可以工作。 https://developer.android.com/reference/android/location/GnssMeasurement https://developer.android.com/guide/topics/sensors/gnss(官方支持列表)。
GNNS(GPS / GLONASS / GALILEO / ...) LocationManager,(0 ms,0 m)-不起作用,一段时间后(1-20s),您将获得相同的协调(如果您留在一个地方)-精度为3-10m。使用LocationManager,您不会从物理模块中获取“原始” GNNS数据,而是由Android API计算得出的。使用GnssMeasurement,您可以得到它。
答案 2 :(得分:-1)
这个怎么样?
- 设定精度+设定功率要求高:
try{
locator = new GeoLocator(this);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.addGpsStatusListener(new GPSStatusManager(locationManager));
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setPowerRequirement(Criteria. POWER_HIGH);
bestProvider = locationManager.getBestProvider(criteria, true);
Bundle bundle = new Bundle();
//I copied the next two lines out of some tutorial hoping that they would help boost my gps, but I'm really not sure what they do
boolean xtraInjection=locationManager.sendExtraCommand(LocationManager.GPS_PROVIDER,
"force_xtra_injection",bundle);
boolean timeInjection=locationManager.sendExtraCommand(LocationManager.GPS_PROVIDER,
"force_time_injection",bundle);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0.0f, locator);
}catch(Exception e){}