所以基本上我的问题是什么:我正在尝试制作某种GPS
应用程序,我想在其中将用户所在位置的坐标(经度纬度)发送到服务器。到目前为止效果很好,但我遇到了一个问题。我想定期(每 5 秒左右 - 顺便说一句,这工作正常)方法仅在从GPS
收到坐标后才调用我的 sendDataToserver()
方法。但问题是我不知道如何制作...(如果语句或其他东西)...仅在接收/更改坐标后调用的 sendDataToserver() 方法。我现在正在使用 if 语句:
if(lat != 0 && long !=0)
{
sendDataToserver();
}
但。。。正如您可能已经猜到的那样,0.0 是一个有效的坐标......那么,您能否告诉我如何解决此问题,以便每 5 秒左右才能调用sendDataToserver()
并且仅在收到坐标时才调用?
首先,一次又一次地将GPS数据发送到websever不是一个好主意。这将很快使您的电池变干。为了避免这种情况,您应该创建一批 10-20 个点以 Json 格式收集,然后将收集的数据发送到收集。
现在来到你的GPS点,你需要使用GpsStateListener。当您的设备找到 GPS 点时,此侦听器具有返回GPS_EVENT_FIRST_FIX
。因此,您可以编写一个条件,只要 Gps 状态侦听器返回此值,您就可以调用您的 Web 服务调用。
final Listener onGpsStatusChange = new GpsStatus.Listener() {
@Override
public void onGpsStatusChanged(int event) {
// TODO Auto-generated method stub
switch(event){
case GpsStatus.GPS_EVENT_STARTED:
// Started...
break ;
case GpsStatus.GPS_EVENT_FIRST_FIX:
// First Fix...
break ;
case GpsStatus.GPS_EVENT_STOPPED:
// Stopped...
break ;
}
}
};
首先:不要使用 long 作为变量 Name。
将最后一个坐标保存在临时变量中怎么样,例如:
if(lastLat != newLat && lastLong != newLong) // code goes here
这可能会解决您的问题:
unsigned long GPS_WAIT=5000;
curr_time= millis();
if(curr_time>=GPS_WAIT)
{
sendDataToserver();curr_time=0;
}else
{
curr_time= millis();
}