您的位置:首页 > 移动开发 > Android开发

Android光线传感器获取光线强弱。LightSensorManager封装类

2017-01-09 16:36 288 查看
Android开发中,有时我们需要获知设备所在环境的光线强弱情况,当然这需要我们设备拥有光线传感器

下面是我简单封装的一个光线传感器管理类,主要提供了3个方法:

1.start():启动,在获取光照强度前调用。

2.stop():停止,在不再需要获取光照强度后调用。

3.getLux():获取光照强度,单位为勒克斯(lux)。

如果你需要额外的一些方法,可以根据返回的光照强度自行添加。下面是整个LightSensorManager类

[java] view
plain copy

 





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; // 默认返回-1,表示设备无光线传感器或者为调用start()方法  

    }  

  

    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就可以很直接的看得到数据了。这个类在我的自定义相机里自动调节曝光程度使用到了,效果还是有的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息