android – 在onLocationChanged中不能setInterval

我正在尝试 http://developer.android.com/training/location/receive-location-updates.html的’LocationUpdates’样本.此应用程序获取并打印位置通知.

我正在尝试根据我的最新位置更改位置更新的间隔.

所以 – 我已将mLocationRequest.setInterval()添加到onLocationChanged中

结果非常错误.我的应用程序受到许多位置更新的轰炸(几秒钟!!!!)

我对样本的唯一更改是:

private int x=0;
@Override
public void onLocationChanged(Location location) {
    // Report to the UI that the location was updated
    mConnectionStatus.setText(R.string.location_updated);

    // In the UI,set the latitude and longitude to the value received
    mLatLng.setText(String.valueOf(x++));

    mLocationRequest.setInterval(1000);          // Change 1
    mLocationClient.requestLocationUpdates(mLocationRequest,this); // Change 2
}

如何更改onLocationChanged内的间隔?

我认为问题是requestLocationUpdates重置了最后一个请求,然后立即发送另一个通知.所以创建了一个循环. (比最快的间隔快).所以我需要一种可靠的方法来改变“实时”LocationRequest的间隔

解决方法

你不应该调用mLocationClient.requestLocationUpdates(mLocationRequest,this);里面onLocationChanged(位置位置)

因为你再次注册听众,你将立即得到第一个电话.

所以我会做的是:

>不要调用mLocationClient.requestLocationUpdates(mLocationRequest,this);并查看是否反正mLocationRequest.setInterval(1000);正在生效
>如果这不起作用,请尝试取消注册侦听器,然后使用技巧等待再次使用新设置注册它,例如:

Handler h = new Handler();
 @Override
   public void onLocationChanged(Location location) {
    //... all your code


     mLocationRequest.setInterval(1000);          
     mLocationClient.removeLocationUpdates(LocationListener listener)

     h.postDelayed (new Runnable(){

       public void run(){
         mLocationClient.requestLocationUpdates(mLocationRequest,YOUROUTTERCLASS.this); 
       }

     },1000);

    }

所以在一秒钟内没有注册的监听器,因此你不会得到任何更新,之后,监听器将被注册该间隔.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...