首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >locationListener只调用一次

locationListener只调用一次
EN

Stack Overflow用户
提问于 2012-09-26 16:34:41
回答 3查看 2K关注 0票数 1

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

代码语言:javascript
复制
public void onCreate( Bundle savedInstanceState ) {
  //snip
  locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 10000, 0, new SendingLocationListener() );
}

在监听程序中,我有以下代码:

代码语言:javascript
复制
public void onLocationChanged( Location location ) {
  if( null == location ) return;
  TrackerNotifierTask task = new TrackerNotifierTask();
  task.execute( location );
}

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

现在,如果我启动该活动,我可以看到onLocationChanged()被执行了,数据成功地命中了远程服务器。但只有一次!无论我以后做什么,改变坐标或任何事情,任务都不会被调用。

这是在android中实现这件事的正确方式吗?或者我应该求助于某个background-service

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-26 16:45:45

请参阅this

LocationListener作为anonymous class实现时,它会按预期工作。

票数 0
EN

Stack Overflow用户

发布于 2012-09-26 20:09:31

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

不一定要将该类定义为inner anonymous class。我将它定义为内部,但命名为one,它也可以工作。

诀窍是,侦听器实例必须声明为一个字段:

代码语言:javascript
复制
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 );
}

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

代码语言:javascript
复制
locationManager.requestLocationUpdates( provider, 1000, 0, new MyLocationListener() );

这是解决方案的一半。另一部分-关于minTime -仍然没有解决。也许这和模拟器有关。我一找到路就会把遗失的部分寄上来。

更新:看起来,在真实设备上,无论和弦是否改变,minInterval似乎都会导致监听器触发

票数 3
EN

Stack Overflow用户

发布于 2018-11-18 20:47:28

我也有类似的问题,当我使用

代码语言:javascript
复制
private LocationListener mLocationListener1 = new LocationListener() {
   @Override
       public void onLocationChanged(Location location) {
       }
}

在我的类中,onLocationChanged只被调用一次,但在我将"final“添加到

代码语言:javascript
复制
private final LocationListener mLocationListener1 = new LocationListener() {

问题就解决了。(在我的例子中,用于地面服务)

看起来像是

如果变量没有使用final关键字定义,在调用一次之后,它将被垃圾回收,并且不会再次被调用……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12597682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档