gpt4 book ai didi

android - onLocationChanged 总是返回我的旧位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:56:36 26 4
gpt4 key购买 nike

我已经为我的 LocationManager 注册了位置更新,每 10 秒

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

但是 onLocationChanged 回调每 10 秒返回一个位置,该位置已经超过 2 小时了。而且这个时间戳永远不会改变。

问题是:

2 小时前,我在一个完全不同的位置(),我在 wifi 上使用了该设备。现在我在另一个 wifi 上的其他位置(办公室),我的应用程序将我当前的位置显示为。昨天在 发生了同样的事情,当时它显示办公室 作为我当前的位置。当我关闭我的应用程序、打开 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) {

}
}

以这种方式开始Activity:

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

list 中的权限:

<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" />

我现在可以通过打开一些其他基于位置的应用程序(如 map 、导航器、Foursquare 等)来获得正确的位置,但为什么我的应用程序无法从提供商那里获得新的/全新的修复。

谢谢

最佳答案

由于这条线,您正在获取旧位置

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

关于android - onLocationChanged 总是返回我的旧位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15675513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com