Отправка GPS-координат с Android на Сервер - PullRequest
2 голосов
/ 20 сентября 2011

Я хочу, чтобы моя фоновая служба отправляла координаты текущего GPS на сервер при каждом изменении местоположения.прямо сейчас у меня есть этот код:

public void onStart (Intent intent, int startid) {

    Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onStart");

    // Acquire a reference to the system Location Manager
    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

    // Define a listener that responds to location updates
    LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location loc) {
            loc.getLatitude();

            loc.getLongitude();

            double lat = loc.getLatitude();
            double lon = loc.getLongitude();


            String curr_lat = Double.toString(lat);
            String curr_lon = Double.toString(lon);

            postData(curr_lat,curr_lon);

            String Text = "My current location is: " +

            "Latitud = " + loc.getLatitude() +

            "Longitud = " + loc.getLongitude();

            Toast.makeText(getApplicationContext(), Text, Toast.LENGTH_LONG).show();


        }

Проблема в том, что метод postData никогда не вызывается при изменении местоположения.postData отправляет текущий GPS-координат на сервер, используя HTTP

public void postData(String currLat, String currLon) { 
    // List with arameters and their values

    String Text2 = "String is: " +

    "Latitud = " + currLat +

    "Longitud = " + currLon;

    Toast.makeText(getApplicationContext(), Text2, Toast.LENGTH_LONG).show();

    HttpPost post = new HttpPost("http://www.url.com/*.php");
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("myusername", currLat));
    nameValuePairs.add(new BasicNameValuePair("mypassword", currLon));
    HttpClient client = new DefaultHttpClient();    

    try {
        post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = client.execute(post);
        HttpEntity entity = response.getEntity();
        String responseText = EntityUtils.toString(entity);
        responseText = responseText.trim();

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    }

Что не вызывает функция postData?Даже это не называлось ни разу.

Ответы [ 3 ]

2 голосов
/ 20 сентября 2011

Вы никогда не регистрируете свой locationListener в locationManager. Вы должны использовать одну форму requestLocationUpdates

Не забудьте позвонить removeUpdates со своим слушателем в режиме onStop вашего сервиса.

0 голосов
/ 20 сентября 2011

Просто совет: вместо того, чтобы размещать местоположение каждый раз, когда оно меняется, публикуйте его только в том случае, если новое местоположение лучше предыдущего. Проверьте эту страницу , чтобы узнать, лучше ли одно местоположение, чем другое.

0 голосов
/ 20 сентября 2011

Я нигде не вижу, чтобы вы начали запрашивать обновления местоположения. Можете ли вы подтвердить, что звоните по следующему номеру:

locationManager.requestLocationUpdates(provider, 0, 0, this);
...