package com.cellbots.sensors; import java.util.List; import com.allthingsgeek.celljoust.MainActivity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; /** * Android Orientation Sensor Manager Archetype * @author antoine vianey * under GPL v3 : http://www.gnu.org/licenses/gpl-3.0.html */ public class LightSensorManager { private static Sensor sensor; private static SensorManager sensorManager; // you could use an OrientationListener array instead // if you plans to use more than one listener private static SensorListener listener; /** indicates whether or not Orientation Sensor is supported */ private static Boolean supported; /** indicates whether or not Orientation Sensor is running */ private static boolean running = false; /** * Returns true if the manager is listening to orientation changes */ public static boolean isListening() { return running; } /** * Unregisters listeners */ public static void stopListening() { running = false; try { if (sensorManager != null && sensorEventListener != null) { sensorManager.unregisterListener(sensorEventListener); } } catch (Exception e) {} } /** * Returns true if at least one Orientation sensor is available */ public static boolean isSupported() { if (supported == null) { sensorManager = (SensorManager) MainActivity.sensorManager; if (sensorManager != null) { List<Sensor> sensors = sensorManager.getSensorList( Sensor.TYPE_LIGHT); supported = new Boolean(sensors.size() > 0); } else { supported = Boolean.FALSE; } } return supported; } /** * Registers a listener and start listening */ public static void startListening( SensorListener orientationListener) { sensorManager = (SensorManager) MainActivity.sensorManager; if (sensorManager != null) { List<Sensor> sensors = sensorManager.getSensorList( Sensor.TYPE_LIGHT); if (sensors.size() > 0) { sensor = sensors.get(0); running = sensorManager.registerListener( sensorEventListener, sensor, SensorManager.SENSOR_DELAY_NORMAL); listener = orientationListener; } } } /** * The listener that listen to events from the orientation listener */ private static SensorEventListener sensorEventListener = new SensorEventListener() { /** The side that is currently up */ private float level; public void onAccuracyChanged(Sensor sensor, int accuracy) {} public void onSensorChanged(SensorEvent event) { level = event.values[0]; // azimuth // forwards orientation to the OrientationListener listener.onLightLevelChanged(level); } }; }