Getting Light Sensor Value

17,031

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.

Share:
17,031
Cistoran
Author by

Cistoran

I know nothing :D

Updated on August 23, 2022

Comments

  • Cistoran
    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
    Cistoran almost 13 years
    Thanks 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 of currentLux from maxLux