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);

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

4

1 回答 1

0

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

OEM 实际上可以按照他们的意愿实现这一点,这会导致各种 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,尽管它可能更多取决于位置提供程序的实现和其他应用程序请求的更新间隔。

...

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 )

于 2012-10-16T04:50:33.987 回答