我想每 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/