import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log;
/**
* <h2>光线传感器管理者
* 1.start():启动,在获取光照强度前调用。
* 2.stop():停止,在不再需要获取光照强度后调用。
* 3.getLux():获取光照强度,单位为勒克斯(lux)。
* 如果你需要额外的一些方法,可以根据返回的光照强度自行添加
* */
public class LightSensorManager {
private static final boolean DEBUG =true;
private static final String TAG ="标签";
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;
}
/**
* 启动光线传感器,在获取光照强度前调用
* <p>功能:打开环境光
* @param context 上下文
*/
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); // 注册事件监听
}
}
/**
* 停止,在不再需要获取光照强度后调用。
* <p>功能:关闭环境光
*/
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; // 光线强度
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() ==Sensor.TYPE_LIGHT) {
// 获取光线强度
lux =event.values[0];
if (DEBUG) {
Log.d(TAG, "lux : " +lux);
}
}
}
}
}