onLocationChanged总是返回我旧的位置

我已经每隔10秒为位置更新注册一次LocationManager

mgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10 * 1000, 50, this); 

onLocationChangedcallback每10秒返回一个位置,该位置超过2个小时。 那个时间戳永远不会改变。

问题是:

2个小时后,我在一个完全不同的位置( ),我在无线上使用的设备。 现在我正在其他位置( 办公室 )在不同的无线networking,我的应用程序显示我的当前位置为 。 同样的事情发生在昨天在家里 ,当时显示办公室作为我现在的位置。 它开始工作(开始显示正确的位置),当我closures我的应用程序,打开FourSquare应用程序,并重新打开我的应用程序。

完整代码:

 public class LocationService extends Service implements LocationListener { public static double curLat = 0.0; public static double curLng = 0.0; private LocationManager mgr; private String best; private Location location; @Override public IBinder onBind(Intent arg0) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { mgr = (LocationManager) getSystemService(LOCATION_SERVICE); best = LocationManager.NETWORK_PROVIDER; location = mgr.getLastKnownLocation(best); if (location != null) { dumpLocation(location); mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10 * 1000, 50, this); } return START_NOT_STICKY; } } private void dumpLocation(Location l) { SimpleDateFormat s = new SimpleDateFormat("dd/MM/yyyy:hh:mm:ss", Locale.ENGLISH); String format = s.format(l.getTime()); //The above time is always 28/03/2013:09:26:41 which is more than 2 hrs old curLat = l.getLatitude(); curLng = l.getLongitude(); } @Override public void onLocationChanged(Location location) { dumpLocation(location); } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } } 

以这种方式开始活动

 AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); Intent i = new Intent(this, LocationService.class); pi = PendingIntent.getService(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); am.cancel(pi); am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 10000, pi); 

清单中的权限:

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> 

我现在可以通过打开一些其他基于地理位置的应用程序,如地图,导航,Foursquare等来获得正确的位置。但是,为什么我的应用程序无法从提供程序获得新的/新的修复程序。

谢谢

Solutions Collecting From Web of "onLocationChanged总是返回我旧的位置"

由于这条线你正在变老

  location = mgr.getLastKnownLocation(best); 

因为如果GPS没有启用,那么它会告诉你旧的位置。 所以删除这个代码它会像一个冠军你也可以参考这个库

https://github.com/nagendraksrivastava/Android-Location-Tracking-Library

根据您的意见我编辑了答案好吧让我逐行解释location = mgr.getLastKnownLocation(best); 它会给你最后一个知道的位置的对象然后它会进入里面,如果条件,它会调用dumplocation,并将获得最后的位置数据,然后你打电话

 mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10 * 1000, 50, this); 

但假设GPS提供者被禁用,那么它将不会获取新的位置,所以你只会得到旧的位置。 所以要么你可以改变它

 if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER,new NagendraSingleLocationListener(),null); } else { locationManager.requestSingleUpdate(LocationManager.NETWORK_PROVIDER,new NagendraSingleLocationListener(),null); } 

我认为,因为你立即取消你的挂起的意图,因此requestLocationUpdate不会开始更新,然后取消。 为什么不睡觉可能会在取消前2秒钟。