基本上我的问题是:
我正在尝试制作某种GPS
应用程序,其中我想将用户所在位置的坐标(经度纬度)发送到服务器。它到目前为止运作良好,但我遇到了问题。我想在sendDataToserver()
收到坐标后定期调用我的GPS
方法(每5秒左右 - BTW这是正常工作的)方法。但问题是我无法弄清楚如何制作......(如果声明或其他东西)......只有在接收/更改坐标后才调用sendDataToserver()方法。我现在正在使用if语句:
if(lat != 0 && long !=0)
{
sendDataToserver();
}
但是......因为你可能已经猜到了0.0是一个有效的坐标......那么你能不能给我一个如何解决这个问题的想法,这样就可以每5秒左右调用一次sendDataToserver()
已收到坐标?
答案 0 :(得分:0)
首先再次发送GPS数据&再次访问websever并不是一个好主意。这会很快干掉你的电池。为了避免这种情况,您应该创建一个10-20点的批处理以Json格式收集,然后将收集的数据发送到收集。
现在转到GPS点,您需要使用GpsStateListener。当您的设备找到GPS点时,此侦听器返回GPS_EVENT_FIRST_FIX
。因此,您可以编写一个条件,只要Gps State Listener返回此值,您就可以调用您的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 ;
}
}
};
答案 1 :(得分:0)
首先:不要使用long作为变量Name。
如何在临时变量中保存最后一个坐标,如:
if(lastLat != newLat && lastLong != newLong) // code goes here
答案 2 :(得分:0)
这可能会解决您的问题:
unsigned long GPS_WAIT=5000;
curr_time= millis();
if(curr_time>=GPS_WAIT)
{
sendDataToserver();curr_time=0;
}else
{
curr_time= millis();
}