在Android开发中,有时我们需要获知设备所在环境的光线强弱情况,当然这需要我们设备拥有光线传感器
下面是我简单封装的一个光线传感器管理类,主要提供了3个方法:
1.start():启动,在获取光照强度前调用。
2.stop():停止,在不再需要获取光照强度后调用。
3.getLux():获取光照强度,单位为勒克斯(lux)。
如果你需要额外的一些方法,可以根据返回的光照强度自行添加。下面是整个LightSensorManager类
- import android.content.Context;
- import android.hardware.Sensor;
- import android.hardware.SensorEvent;
- import android.hardware.SensorEventListener;
- import android.hardware.SensorManager;
- import android.util.Log;
-
- public class LightSensorManager {
-
- private static final boolean DEBUG = true;
- private static final String TAG = "LightSensor";
-
- private static LightSensorManager instance;
- private SensorManager mSensorManager;
- private LightSensorListener mLightSensorListener;
- private boolean mHasStarted = false;
-
- private LightSensorManager() {
- }
-
- public static LightSensorManager getInstance() {
- if (instance == null) {
- instance = new LightSensorManager();
- }
- return instance;
- }
-
- public void start(Context context) {
- if (mHasStarted) {
- return;
- }
- mHasStarted = true;
- mSensorManager = (SensorManager) context.getApplicationContext().getSystemService(Context.SENSOR_SERVICE);
- Sensor lightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
- if (lightSensor != null) {
- mLightSensorListener = new LightSensorListener();
- mSensorManager.registerListener(mLightSensorListener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL);
- }
- }
-
- public void stop() {
- if (!mHasStarted || mSensorManager == null) {
- return;
- }
- mHasStarted = false;
- mSensorManager.unregisterListener(mLightSensorListener);
- }
-
-
-
-
- public float getLux() {
- if (mLightSensorListener != null) {
- return mLightSensorListener.lux;
- }
- return -1.0f;
- }
-
- private class LightSensorListener implements SensorEventListener {
-
- private float lux;
-
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
-
- public void onSensorChanged(SensorEvent event) {
- if (event.sensor.getType() == Sensor.TYPE_LIGHT) {
-
- lux = event.values[0];
- if (DEBUG) {
- Log.d(TAG, "lux : " + lux);
- }
- }
- }
-
- }
-
- }
对于这个光线强度的值。越暗数值越低,最低应该是0,在白天室内大概有300左右,仅供参考,不知道不同的设备会不会存在一定误差。
调用程序就不贴了,通过log就可以很直接的看得到数据了。这个类在我的自定义相机里自动调节曝光程度使用到了,效果还是有的。