Android verzögerter Aufruf im EventListener

UweA

Mitglied
Hallo,

ich habe eine Funktion mit dem Näherungssensor verknüpft, die jedoch nicht "live" aufgerufen wird, sondern erst, wenn das Programm beendet wird.

Java:
SensorEventListener proximitySensorEventListener = new SensorEventListener()
{
  @Override
  public void onAccuracyChanged(Sensor sensor, int accuracy) {}

  @Override
  public void onSensorChanged(SensorEvent event) 
  {
    Log.v("SensorEventListener","SensorEventListener");
  }
};
		
SensorManager sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
sensorManager.registerListener(proximitySensorEventListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);

SystemClock.sleep(5000);

Ich würde nun erwarten, dass meine log-Ausgaben während der 5-Sekündigen Pause auftreten.
Das tun sie nicht. Erst wenn das "Sleep(...)" abgewartet wurde, kommen diese Ausgaben auf einmal.
Die Systemausgaben des SensorManagers kommen hingegen "live".
Das Ganze sieht im "LogCat" so aus:

07-06 16:34:53.271: D/SensorManager(6600): Proximity, val = 5.0 [far]
07-06 16:34:53.271: D/SensorManager(6600): Proximity, val = 0.0 [close]
07-06 16:34:54.682: D/SensorManager(6600): Proximity, val = 5.0 [far]
07-06 16:34:55.373: D/SensorManager(6600): Proximity, val = 0.0 [close]
07-06 16:35:02.561: V/SensorEventListener(6600): SensorEventListener
07-06 16:35:03.192: V/SensorEventListener(6600): SensorEventListener
07-06 16:35:03.662: V/SensorEventListener(6600): SensorEventListener
07-06 16:35:04.323: V/SensorEventListener(6600): SensorEventListener

Die sollten doch eigentlich paarweise auftreten, oder?
Was mache ich falsch?

Grüße,
Uwe
 

UweA

Mitglied
Habe es selbst lösen können:

Der SensorManager-Handler benötigt wohl einen eigenständig laufenden Thread, damit die Signalisierungen durchkommen.

Ich habe den Code jetzt wie folgt erweitert:
Java:
SensorEventListener proximitySensorEventListener = new SensorEventListener()
{
  @Override
  public void onAccuracyChanged(Sensor sensor, int accuracy) {}

  @Override
  public void onSensorChanged(SensorEvent event)
  {
    Log.v("SensorEventListener","SensorEventListener");
  }
};

HandlerThread handlerThread = new HandlerThread("ProximityListener");
handlerThread.start(); 
Handler handler = new Handler(handlerThread.getLooper());
      
SensorManager sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
sensorManager.registerListener(proximitySensorEventListener, sensor, SensorManager.SENSOR_DELAY_NORMAL, handler);

SystemClock.sleep(5000);

Neu ist lediglich "handlerThread" und "handler".
Damit funktioniert es dann.

Grüße,
Uwe
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben