package net.bible.service.device; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.util.Log; import net.bible.android.BibleApplication; import java.util.List; /** Light Sensor interface * * @author Martin Denham [mjdenham at gmail dot com] * @see gnu.lgpl.License for license details.<br> * The copyright to this program is held by it's author. */ public class LightSensor { public final static float NO_READING_YET = -1919; private float mReading = NO_READING_YET; private boolean mMonitoring = false; private static final String TAG = "LightSensor"; /** return reading or null if no light sensor */ public int getReading() { if (!mMonitoring) { ensureMonitoringLightLevel(); } Log.d(TAG, "Light Sensor:"+mReading); return Math.round(mReading); } private synchronized void ensureMonitoringLightLevel() { if (!mMonitoring) { if (isLightSensor()) { SensorManager sm = (SensorManager) BibleApplication.getApplication().getSystemService(Context.SENSOR_SERVICE); Sensor oSensor = sm.getDefaultSensor(Sensor.TYPE_LIGHT); sm.registerListener(myLightListener, oSensor, SensorManager.SENSOR_DELAY_UI); // wait for first event try { Thread.sleep(100); } catch (InterruptedException ie) { Log.e(TAG, "Interrupted getting light signal", ie); } } mMonitoring = true; } } final SensorEventListener myLightListener = new SensorEventListener() { public void onSensorChanged(SensorEvent sensorEvent) { if (sensorEvent.sensor.getType() == Sensor.TYPE_LIGHT) { mReading = sensorEvent.values[0]; } } public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; /** * Returns true if at least one Orientation sensor is available */ public boolean isLightSensor() { Log.d(TAG, "check for a light sensor"); boolean isLightSensor = false; SensorManager sm = (SensorManager) BibleApplication.getApplication().getSystemService(Context.SENSOR_SERVICE); if (sm != null) { List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_LIGHT); isLightSensor = (sensors.size() > 0); } Log.d(TAG, "Finished check for a light sensor"); return isLightSensor; } }