Getting Light Sensor Value
As noted here, it isn't possible to directly get the current sensor value and, while some more recent versions of Android will generate an onSensorChanged event as soon as the listener is registered (allowing you to get a baseline), earlier versions don't. So the only thing you can really do is hope that the user is either running a more recent version of Android or that the value changes and then retrieve the current lux value from event.values[0] inside onSensorChanged (e.g.) :
public void onSensorChanged(SensorEvent event)
{
if( event.sensor.getType() == Sensor.TYPE_LIGHT)
{
currentLux = event.values[0];
if (currentLux > maxLux)
maxLux = currentLux;
}
}
(After changing maxLux and currentLux to floats). This then leaves the issue of retrieving the current value based on a button press, which can be done by looking at the value of currentLux at the time the button is pressed.
Comments
-
Cistoran over 1 year
So I'm looking for a way to get the current value of the Light Sensor (in Lux obviously) on a button press. Here is the code I'm using to implement control of the light sensor
public class SensorActivity extends Activity implements SensorEventListener { private final SensorManager mSensorManager; private final Sensor mLight; int minLux = 0; int currentLux = 0; int maxLux; public SensorActivity() { mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); } protected void onResume() { super.onResume(); mSensorManager.registerListener((SensorEventListener) this, mLight, SensorManager.SENSOR_DELAY_NORMAL); } protected void onPause() { super.onPause(); mSensorManager.unregisterListener((SensorListener) this); } public void onAccuracyChanged(Sensor sensor, int accuracy) { if(sensor.getType() == Sensor.TYPE_LIGHT) { } } public void onSensorChanged(SensorEvent event) { if( event.sensor.getType() == Sensor.TYPE_LIGHT) { } } }
I also have this code making the button to call a function
<Button android:layout_width="122px" android:id="@+id/widget35" android:text="Start" android:layout_height="wrap_content" android:layout_x="112dp" android:layout_y="249dp" android:onClick="onButtonDown"></Button>
How would I get the current lux value while the app is running in the background, and how would I get and store the current lux value on button press into
int maxLux;
? -
Cistoran almost 13 yearsThanks for the help! I don't need a constant value only when it changes. I made a few adjustments to your code.
maxLux
will be a constant based on the original calibration (what the button press is for) then the brightness of the screen will change based on a percentage ofcurrentLux
frommaxLux