光照传感器

一、光照传感器的用法


1. 获取 SensorManager 实例。
SensorManager senserManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
2. 通过 getDefaultSensor() 得到某种传感器的实例。
Sensor sensor = senserManager.getDefaultSensor(Sensor.TYPE_LIGHT);
3. 借助 SensorEventListener 对传感器输出的信号进行监听。
SensorEventListener listener = new SensorEventListener() {

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
    }
};
  • 当传感器的精度发生变化时就会调用 onAccuracyChanged() 方法。
  • 当传感器监测到的数值发生变化时就会调用 **onSensorChanged() **方法。
    **onSensorChanged() **方法中传入了一个 SensorEvent 参数,这个参数里又包含了一个 values 数组,所有传感器输出的信息都是存放在这里的。
4. 调用 SensorManager 的 registerListener() 方法来注册SensorEventListener 使其生效。
senserManager.registerListener(listener, senser, SensorManager.SENSOR_DELAY_NORMAL);
  • 第一个参数:SensorEventListener 的实例
  • 第二个参数:Sensor 的实例
  • 第三个参数:传感器输出信息的更新速率。以下更新速率是依次递增。
  • SENSOR_DELAY_UI
  • SENSOR_DELAY_NORMAL
  • **SENSOR_DELAY_GAME **
  • **SENSOR_DELAY_FASTEST **
5. 最后调用 unregisterListener() 方法将使用的资源释放掉。
sensorManager.unregisterListener(listener);

二、制作简易光照传感器


public class MainActivity extends Activity {
    private SensorManager sensorManager;
    private TextView lightLevel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lightLevel = (TextView) findViewById(R.id.light_level);
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
        sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (sensorManager != null) {
            sensorManager.unregisterListener(listener);
        }
    }

    private SensorEventListener listener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            // values数组中第一个下标的值就是当前的光照强度
            float value = event.values[0];
            lightLevel.setText("Current light level is " + value + " lx");
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
    };
}

你可能感兴趣的:(光照传感器)