2017-04-20 2 views
2

J'ai implémenté une classe en Java (Android) pour calculer l'altitude de l'appareil et je veux accéder à cette valeur depuis une autre classe.La valeur retournée par le capteur est toujours 0

La première classe est la suivante:

public class DeviceAltitudeHandler extends Activity implements SensorEventListener{ 

SensorManager sm; 
Sensor sensor; 
float altitude ; 


public DeviceAltitudeHandler(SensorManager sm, float altitude) { 
    super(); 
    this.sm = sm; 
    this.altitude = altitude; 
    sensor = sm.getDefaultSensor(Sensor.TYPE_PRESSURE); 
    sm.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI); 

} 




@Override 
public void onSensorChanged(SensorEvent event) { 

    float [] values = event.values; 
    altitude = SensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE,values[0]); 

} 

public float getAltitude() { 
    return altitude; 
} 

@Override 
public void onAccuracyChanged(Sensor sensor, int accuracy) { 

} 

public void start() { 
    sm.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI); 

} 


public void stop() { 
    sm.unregisterListener(this); 
} 

} 

J'utilise un vrai smartphone qui intègre un baromètre, mais la valeur retournée est toujours 0 !!! et le code de la seconde classe est:

public class TestActivity extends Activity { 

TextView tv; 
DeviceAltitudeHandler dah; 
float altitude; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test); 
    tv = (TextView) findViewById(R.id.textView5); 

    SensorManager sm = (SensorManager) getSystemService(Service.SENSOR_SERVICE); 

    dah = new DeviceAltitudeHandler(sm,altitude); 

    tv.setText(""+dah.getAltitude()); 

} 

@Override 
protected void onResume() { 
    super.onResume(); 
    dah.start(); 

} 

@Override 
protected void onPause() { 
    super.onPause(); 
    dah.stop(); 

} 

}

Merci à l'avance.

Répondre

1

Par défaut, vous altitude valeur initialisés avec 0 et vous changez cette valeur dans le onSensorChanged qui est appelée lorsque les valeurs des capteurs ont changé, mais vous essayez de sortie à l'intérieur onCreate quand onSensorChanged peut-être n'a pas encore été appelée et vous êtes recevoir votre valeur initiale 0. Essayez d'ajouter des journaux à l'intérieur de la méthode onSensorChanged et vérifiez si elle est appelée et quelle est sa valeur.

+0

Merci pour votre réponse rapide. Le problème est avec la méthode onSensorChanged, n'est pas appelé et la valeur retournée est toujours 0 (la valeur initiale). – Wima

+0

En fait, le problème est avec la méthode "getAltitude()", elle ne retourne pas la valeur de l'altitude. – Wima

+0

@Wima vous pouvez vérifier ce lien http://stackoverflow.com/questions/7410095/android-is-there-a-way-to-obtain-altitude-aside-from-location-getaltitude-i et de comparer avec votre code peut-être que vous avez fait une erreur –