Wednesday, August 29, 2012

Using Android device build-in light sensor in Android

It's a simple light meter Using Android device build-in light sensor. A ProgressBar is defined in main.xml as a indicator of the light sensor. The default value of 100 defined in android:max is a dummy value, it will be updated after lightSensor.getMaximumRange(). The updated reading will be be read in lightSensorEventListener, and update the ProgressBar accordingly.

Using Android device build-in light sensor

package com.AndroidLightSensor;
 
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
 
public class AndroidLightSensorActivity extends Activity {
  
 ProgressBar lightMeter;
 TextView textMax, textReading;
  
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lightMeter = (ProgressBar)findViewById(R.id.lightmeter);
        textMax = (TextView)findViewById(R.id.max);
        textReading = (TextView)findViewById(R.id.reading);
         
        SensorManager sensorManager
        = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        Sensor lightSensor
        = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
      
        if (lightSensor == null){
         Toast.makeText(AndroidLightSensorActivity.this,
           "No Light Sensor! quit-",
           Toast.LENGTH_LONG).show();
        }else{
         float max =  lightSensor.getMaximumRange();
         lightMeter.setMax((int)max);
         textMax.setText("Max Reading: " + String.valueOf(max));
          
         sensorManager.registerListener(lightSensorEventListener,
           lightSensor,
           SensorManager.SENSOR_DELAY_NORMAL);
          
        }
    }
     
    SensorEventListener lightSensorEventListener
    = new SensorEventListener(){
 
  @Override
  public void onAccuracyChanged(Sensor sensor, int accuracy) {
   // TODO Auto-generated method stub
    
  }
 
  @Override
  public void onSensorChanged(SensorEvent event) {
   // TODO Auto-generated method stub
   if(event.sensor.getType()==Sensor.TYPE_LIGHT){
    float currentReading = event.values[0];
    lightMeter.setProgress((int)currentReading);
    textReading.setText("Current Reading: " + String.valueOf(currentReading));
   }
  }
      
    };
}