设备移动时的位置跟踪

时间:2012-10-11 11:07:27

标签: android location

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

这是我的代码。

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设备和操作系统。

1 个答案:

答案 0 :(得分:0)

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

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

此不一致行为中包含的错误会影响许多不同的设备,其中minTime参数被完全忽略。有关详细信息,请与Android小组观看此对话:

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

从Android 4.1开始,Location API规范已经收紧,并且已添加其他CtsVerifier测试以在Android设备上实施更一致的行为。

Android 4.1及更高版本的预期行为是:

“可以使用minTime参数控制更新间隔。位置更新之间经过的时间永远不会小于minTime,尽管它可能更多取决于位置提供程序实现和其他应用程序请求的更新间隔。” p>

...

minDistance参数还可用于控制位置更新的频率。如果它大于0,那么位置提供程序将仅在位置至少改变minDistance米时向您的应用程序发送更新,并且至少已经过了minTime毫秒。但是,位置提供商使用minDistance参数更难以节省功耗,因此minTime应该是节省电池寿命的主要工具。

...

在Jellybean之前,minTime参数只是一个提示,一些位置提供程序实现忽略了它。从Jellybean开始,Android兼容设备必须同时观察minTime和minDistance参数。“

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