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

    }

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

相关文章

AdvserView.java package com.earen.viewflipper; import an...
ImageView的scaleType的属性有好几种,分别是matrix(默认)...
文章浏览阅读8.8k次,点赞9次,收藏20次。本文操作环境:win1...
文章浏览阅读1.2w次,点赞15次,收藏69次。实现目的:由main...
文章浏览阅读3.8w次。前言:最近在找Android上的全局代理软件...
文章浏览阅读2.5w次,点赞17次,收藏6次。创建项目后,运行项...