如何每5秒向Android发送一次Android GPS坐标

时间:2013-07-22 15:40:35

标签: android mysql gps

我正在尝试从Android获取GPS坐标并将其发送到MySQL数据库。

一切运行良好,但程序进入无限循环:因为我使用While(true)更新GPS坐标并每隔5秒将其发送到数据库。

如何避免循环并每隔5秒将坐标发送到数据库中。

这是我的代码:

package com.example.gpstracking;

import java.util.ArrayList;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;

public class AndroidGPSTrackingActivity extends Activity {
    Button btnShowLocation;

    GPSTracker gps;
    double tmplat=0;
    double tmplong=0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        while (true)
        {
            gps = new GPSTracker(AndroidGPSTrackingActivity.this);
            if(gps.canGetLocation()){
                double latitude = gps.getLatitude();
                double longitude = gps.getLongitude();
                String lat=String.valueOf(latitude);
                String lon=String.valueOf(longitude);
                ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
                postParameters.add(new BasicNameValuePair("latitude", lat));
                postParameters.add(new BasicNameValuePair("longitude", lon));
                try {   
                    CustomHttpClient.executeHttpPost("http://plangsm2012.site40.net/new/check.php", postParameters);
                } catch (Exception e) { 
                }
                tmplat=latitude;
                tmplong=longitude;  

            }

            else{
            gps.showSettingsAlert();
            }

            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

在您的locationlistener中,填写您的bean并发布帖子,如下所示:

@Override
public void onLocationChanged(Location arg0) {
    myLocation.setLatitude(Double.toString(arg0.getLatitude()));
    myLocation.setLongitude(Double.toString(arg0.getLongitude()));
    myLocation.setTimestamp(arg0.getTime());
    myLocation.setUserId(Secure.ANDROID_ID);
    if (new DateTime(arg0.getTime().minusMinutes(5) > new DateTime(oldTime)) 
        postToRemote(myLocation);
}

myLocation是bean,包含纬度,经度,时间戳和设备ID的属性,由于遗留原因而被错误地称为userId。

至于每5秒发布一次,您需要记录发布时间并将其与发布呼叫之前的当前时间进行比较,如上面的if语句所示。

答案 1 :(得分:0)

您可以使用计时器解决此问题。

private void time() {

    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {

             gps = new GPSTracker(AndroidGPSTrackingActivity.this);
            if(gps.canGetLocation()){
                double latitude = gps.getLatitude();
                double longitude = gps.getLongitude();
                String lat=String.valueOf(latitude);
                String lon=String.valueOf(longitude);
                ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
                postParameters.add(new BasicNameValuePair("latitude", lat));
                postParameters.add(new BasicNameValuePair("longitude", lon));
                try {   
                    CustomHttpClient.executeHttpPost("http://plangsm2012.site40.net/new/check.php", postParameters);
                } catch (Exception e) { 
                }
                tmplat=latitude;
                tmplong=longitude;  

            }

            else{
            gps.showSettingsAlert();
            }

            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }, 5000); // 5 sec

}

干杯