GPS не обновляется

Добрый вечер всем,

В настоящее время я делаю приложение, которое получает значения различных датчиков, таких как акселерометр, датчик приближения, компас и GPS, значения, которые я собираюсь использовать для своего проекта робототехники. Тем не менее, у меня есть проблема с GPS, который не обновляется, когда я меняю местоположение, не закрывая Activity. Действительно, если я остановлю приложение, а затем перезапущу его в другом месте, координаты будут правильными, так что это действительно проблема обновления. Также обратите внимание, что местоположение пересчитывается, когда экран меняет свою ориентацию (пейзаж -> портрет). Но я бы хотел, чтобы он работал, ничего не трогая, хе-хе.

Итак, вот мой код:

package com.pIndus.sensors;

import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;

public class Sensors extends Activity implements SensorEventListener{

SensorManager sm;
LocationManager lm;
LocationListener ls;
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    sm = (SensorManager) getSystemService(SENSOR_SERVICE);
    lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

    boolean accelSupported = sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_FASTEST);

    if(!accelSupported)
    {
        sm.unregisterListener(this, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER));
        ((TextView)findViewById(R.id.acc)).setText("Accéléromètre non disponible");
    }

    boolean compassSupported = sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_FASTEST);

    if(!compassSupported)
    {
        sm.unregisterListener(this, sm.getDefaultSensor(Sensor.TYPE_ORIENTATION));
        ((TextView)findViewById(R.id.compass)).setText("Boussole non disponible");
    }

    boolean proxySupported = sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_PROXIMITY),SensorManager.SENSOR_DELAY_FASTEST);

    if(!proxySupported)
    {
        sm.unregisterListener(this, sm.getDefaultSensor(Sensor.TYPE_PROXIMITY));
        ((TextView)findViewById(R.id.proxy)).setText("Capteur de proximité non disponible");
    }

    ls = new MyLocationListener();


    lm.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, 0, 0, ls);

}

@Override
public void onStop()
{
    super.onStop();
    lm.removeUpdates(ls);
    sm.unregisterListener(this);
}

@Override
public void onPause()
{
    super.onStop();
    lm.removeUpdates(ls);
    sm.unregisterListener(this);
}



@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) 
{
    // TODO Auto-generated method stub

}

@Override
public void onSensorChanged(SensorEvent event) 
{
    switch(event.sensor.getType())
    {
        case Sensor.TYPE_ACCELEROMETER:
            onAccelChanged(event);
        break;

        case Sensor.TYPE_ORIENTATION:
            onCompassChanged(event);
        break;

        case Sensor.TYPE_PROXIMITY:
            onProxyChanged(event);
        break;  
    }

}

public void onAccelChanged(SensorEvent event)
{
    float aX,aY,aZ;

    aX = event.values[0];
    aY = event.values[1];
    aZ = event.values[2];

    ((TextView)findViewById(R.id.axeX)).setText("Axe X : " + aX);
    ((TextView)findViewById(R.id.axeY)).setText("Axe Y : " + aY);
    ((TextView)findViewById(R.id.axeZ)).setText("Axe Z : " + aZ);

}

public void onCompassChanged(SensorEvent event)
{
    float azimuth,pitch,roll;

    azimuth = event.values[0];
    pitch = event.values[1];
    roll = event.values[2];

    ((TextView)findViewById(R.id.azimuth)).setText("Azimuth : " + azimuth);
    ((TextView)findViewById(R.id.pitch)).setText("Pitch : " + pitch);
    ((TextView)findViewById(R.id.roll)).setText("Roll : " + roll);
}

public void onProxyChanged(SensorEvent event)
{
    float x;

    x = event.values[0];

    ((TextView)findViewById(R.id.prox)).setText("Proximité : " + x);

}

public class MyLocationListener implements LocationListener

{

    @Override
    public void onLocationChanged(Location location) {
        double longitude, lattitude;

        longitude = location.getLongitude();
        lattitude = location.getLatitude();

        ((TextView)findViewById(R.id.longi)).setText("Longitude : " + longitude);
        ((TextView)findViewById(R.id.latti)).setText("Lattitude : " + lattitude);

         lm.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, 0, 0, ls);


    }

    @Override
    public void onProviderDisabled(String provider) {

        ((TextView)findViewById(R.id.warnGPS)).setText("GPS Desactivé");

    }

    @Override
    public void onProviderEnabled(String provider) {
        ((TextView)findViewById(R.id.warnGPS)).setText("GPS Activé");

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

}

}

Кто-нибудь имеет представление о моей проблеме?

Большое спасибо за вашу помощь и хорошего дня/вечера/ночи.


person NachtNebel    schedule 29.04.2011    source источник


Ответы (1)


Замените строку ниже на

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 1.0f, ls);

person Nishant Shah    schedule 29.04.2011
comment
Привет, спасибо за ваш вклад. Тем не менее, это не работает (не обновляется). - person NachtNebel; 29.04.2011