正确发送数据我们的GPS坐标



所以基本上我的问题是什么:我正在尝试制作某种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();
}

最新更新