在JellyBean之后的版本中没有调用onLocationChanged

时间:2013-06-26 11:56:58

标签: android location

我的下面代码在除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);
    }

如果有人知道解决方案,请告诉我。

1 个答案:

答案 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