2011-04-29 4 views
1

Bonsoir à tous,GPS ne met pas à jour

Je fais actuellement une application qui obtenir les valeurs des différents capteurs tels que l'accéléromètre, le capteur de proximité, la boussole et le GPS, les valeurs que je vais à utiliser pour mon projet de robotique. Pourtant, j'ai un problème avec le GPS qui ne se met pas à jour lorsque je change de position sans fermer l'activité. En effet, si j'arrête l'application puis la redémarre à un autre endroit, les coords seront corrects, donc c'est vraiment un problème de mise à jour. Notez également que l'emplacement est recalculé lorsque l'écran change d'orientation (paysage -> portrait). Mais j'aimerais que ça marche sans toucher à rien, hehe.

Alors, voici mon code:

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 

    } 

} 

}

Quelqu'un at-il une idée de mon problème?

Merci beaucoup pour votre aide et passez une bonne journée/soirée/nuit.

Répondre

0

Remplacer dessous de la ligne par

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

+0

Salut, merci pour votre contribution. Pourtant, cela ne fonctionne pas (il ne met pas à jour). – NachtNebel