android - locationListener 只被调用一次

标签 android geolocation android-asynctask locationlistener

我想每 10 秒向远程服务器发送一些数据和坐标。我想,最好的匹配是

public void onCreate( Bundle savedInstanceState ) {
  //snip
  locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 10000, 0, new SendingLocationListener() );
}

在监听器中我有以下代码:

public void onLocationChanged( Location location ) {
  if( null == location ) return;
  TrackerNotifierTask task = new TrackerNotifierTask();
  task.execute( location );
}

TrackerNotifierTask 在它的 doInBackground() 方法中使用了 httpclient,所以它非常简单。

现在,如果我开始 Activity ,我可以看到 onLocationChanged() 被执行并且数据成功到达远程服务器。但只有一次!无论我以后做什么,更改坐标或其他任何操作,都不会调用该任务。

这是在 android 中实现此类事情的正确方法还是我应该求助于一些 background-service

最佳答案

Shrikant 的链接给了我一些关于 LocationListener 实现的类结构的提示。

该类不一定必须定义为内部匿名类。我将其定义为内部,但命名为 one 并且它也有效。

诀窍在于,必须将监听器实例声明为字段:

private LocationListener listener;

@Override
public void onCreate( Bundle savedInstanceState ) {
  //snip
  locationManager = (LocationManager)this.getSystemService( Context.LOCATION_SERVICE );
  listener = new MyLocationListener( SomeActivity.this );
  locationManager.requestLocationUpdates( provider, 1000, 0, listener );
}

否则它将在第一次运行后被垃圾收集,如果这样定义:

locationManager.requestLocationUpdates( provider, 1000, 0, new MyLocationListener() );

这是解决方案的一半。另一部分 - 关于 minTime - 仍未解决。也许它与模拟器有关......我会在找到方法后立即发布缺失的部分。

更新: 看起来,在真实设备上,无论坐标是否改变,minInterval 似乎都会触发听众

关于android - locationListener 只被调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12597682/

相关文章:

Android textview 不支持换行

java - 我想在 Android 中解析 Google Map API 以进行反向地理编码

java - Android:下载的图像未显示在 ListView 中

java - Android:如果我将 serialVersionUID 添加到旧的可序列化对象会发生什么?

r - 在 igraph r 包中使用地理坐标作为顶点坐标

android - Cordova 地理定位精度上限为 10 米

javascript - 如何正确使用 computeDistanceBetween()?

Android 使新的异步任务在后台或 Dropbox Core API 问题中优先于其他任务

java - 未经检查的调用 'execute(Params...)' 作为原始类型 'android.os.AsyncTask' 的成员

java - Android Studio 方法 gettext 必须从 ui 线程调用,当前推断线程是工作线程