2012-10-11 220 views
3

设备移动时的位置跟踪

我正在开发一个应用程序,它特别在移动时跟踪设备的位置。对于同一API调用,我在三星和HTC设备上获得不同操作系统版本的不同响应。

这是我的代码。

private static final long HUNDERE_METERS = 100; // in Meters
private static final long TWO_MIN = 60000*2; // in Milliseconds

Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
criteria.setBearingRequired(true); 
criteria.setBearingAccuracy(Criteria.ACCURACY_HIGH); 
criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH); 
String provider = mlocManager.getBestProvider(criteria, false); 
mlocManager.requestLocationUpdates(provider, TWO_MIN, HUNDERE_METERS, mlocListener); 

'三星GALAXY Nexus-4.1.1' 给出了每一个距离的位置更新由HUNDRED_METERS移动(100米),这是罚款。但在'HTC EVO 3D PG86100-4.0.3'中,GPS变为2分钟不可用,然后变为可用,每2分钟后会导致位置更新。

我修改了代码如下

mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TWO_MIN, HUNDERE_METERS, mlocListener); 

现在HTC开始工作的罚款,并给予100米,但在三星GPS移动为每个距离的位置成为每2分钟不可用。

请建议使用什么参数调用requestLocationUpdates来获取距离移动距离的位置更新,距离应该适用于所有Android设备和操作系统。

回答

0

在Android 4.1 Jelly Bean之前,根据Android位置API规范,minTime和minDistance参数仅仅是应用程序想要保存能量的“提示”。

原始设备制造商可以实际实现这一点,但他们想要的,这导致了各种Android设备上的一些不一致的行为。因此,在Android 4.1之前,当使用相同的minTime和minDistance参数时,您会在不同设备上看到各种行为。

包含在这种不一致的行为中是一个影响许多不同设备的问题,其中minTime参数被完全忽略。看到这个对话与Android团队的细节:

https://android-review.googlesource.com/#/c/34230/

开始在安卓4.1,定位API规范已收紧和附加CtsVerifier测试已被添加为强制Android设备更一致的行为。

上Android 4.1以上的预期行为是:

“的更新间隔可以使用minTime参数来控制位置更新之间的经过的时间决不会小于minTime,虽然它可以是更多,这取决于。位置提供者执行和其他应用程序所要求的更新间隔。

...

的minDistance才会参数也可以用来控制位置更新的频率。如果大于0,则该位置提供者将只发送你的应用程序更新w当该位置已经改变了至少minDistance米,并且至少minTime毫秒已经过去。然而,定位提供商使用minDistance参数节省功耗更为困难,所以minTime应该是节省电池寿命的主要工具。

...

此前杰利贝恩的minTime参数只是一个提示,以及一些位置提供者实现忽略了它。从杰利贝恩及以后它是强制性的Android兼容设备,观察两者的minTime和minDistance才会参数“

来自: http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(java.lang.String,long,float,android.location.LocationListener