我的下面代码在除android 4.1和android 4.2版本之外的所有设备中工作。我已经尝试了很多东西,并在三星论坛上搜索过它。它还说它不起作用看到这个Link
mLocationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,1000, 100, this);
public void onLocationChanged(Location newBestLocation) {
System.out.println("On Location Change Call.......");
mLocationManager.removeUpdates(this);
boolean best = isBetterLocation(newBestLocation, currentLocation);
if (best) {
currentLocation = newBestLocation;
}
locationUpdater.onLocationUpdateReceived(currentLocation);
}
如果有人知道解决方案,请告诉我。
答案 0 :(得分:0)
位置更新频率的LocationManager行为与Android 4.1中更改的minTime和minDistance参数的关系。
来自http://developer.android.com/reference/android/location/LocationManager.html:
在Jellybean之前,minTime参数只是一个提示,一些位置提供程序实现忽略了它。从Jellybean开始,Android兼容设备必须同时观察minTime和minDistance参数。
我怀疑你的minDistance = 100可能导致4.1和更高版本缺少更新,当Android确实在4.0及更低版本(可能不正确)触发更新时。尝试将两个值都更改为= 0并查看会发生什么 - 您应该经常看到更新:
mLocationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0, this);
您需要使用这些参数,直到您获得满足应用程序要求的位置更新频率,同时节省电池寿命,并在您想要支持的所有Android版本上保持一致的行为。
鉴于上述限制,您可能需要考虑切换到新的融合位置提供程序: http://developer.android.com/training/location/receive-location-updates.html
...更具体地说,PRIORITY_BALANCED_POWER_ACCURACY优先级: http://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html#PRIORITY_BALANCED_POWER_ACCURACY