Invité Posté(e) 29 avril 2011 Share Posté(e) 29 avril 2011 Bonjour à tous, Je suis actuellement en train de développer une petite application (usage privé, ne vous en faites pas une m**** pareille ne verra pas le jour sur le Market), qui me permet de récupérer les valeurs des différents capteurs qui m'intéressent (Accéléromètre, boussole, proximité et GPS). Cependant, j'ai un petit problème avec le GPS dont la valeur ne s'actualise pas sauf quand l'orientation de l'écran change [dans le sens où l'on passe de portrait à paysage et vice-versa] (donc j'imagine que cela relance l'activité, enfin je sais pas, j'imagine que y'a un truc qui change). Bref. Voici mon programme: 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 } } } Vu qu'il n'y a pas d'actualisation, je pense avoir oublié de faire un requestLocationUpdates quelque part, mais je ne vois vraiment pas où... Une idée peut être ? Merci d'avance et bonne journée ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.