Android编程使用光线传感器获取光线强弱的方法【LightSensorManager封装类】
本文实例讲述了Android编程使用光线传感器获取光线强弱的方法。分享给大家供大家参考,具体如下:
在Android开发中,有时我们需要获知设备所在环境的光线强弱情况,当然这需要我们设备拥有光线传感器。通常我们手机的屏幕自动亮度都是用光线传感器来实现的。该传感器在前置摄像头附近,此外,还有一个距离传感器。这里我们主要讲解如何使用Android手机的光线传感器。
下面是我简单封装的一个光线传感器管理类,主要提供了3个方法:
1.start():启动,在获取光照强度前调用。
2.stop():停止,在不再需要获取光照强度后调用。
3.getLux():获取光照强度,单位为勒克斯(lux)。
如果你需要额外的一些方法,可以根据返回的光照强度自行添加。下面是整个LightSensorManager类
importandroid.content.Context;
importandroid.hardware.Sensor;
importandroid.hardware.SensorEvent;
importandroid.hardware.SensorEventListener;
importandroid.hardware.SensorManager;
importandroid.util.Log;
publicclassLightSensorManager{
privatestaticfinalbooleanDEBUG=true;
privatestaticfinalStringTAG="LightSensor";
privatestaticLightSensorManagerinstance;
privateSensorManagermSensorManager;
privateLightSensorListenermLightSensorListener;
privatebooleanmHasStarted=false;
privateLightSensorManager(){
}
publicstaticLightSensorManagergetInstance(){
if(instance==null){
instance=newLightSensorManager();
}
returninstance;
}
publicvoidstart(Contextcontext){
if(mHasStarted){
return;
}
mHasStarted=true;
mSensorManager=(SensorManager)context.getApplicationContext().getSystemService(Context.SENSOR_SERVICE);
SensorlightSensor=mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);//获取光线传感器
if(lightSensor!=null){//光线传感器存在时
mLightSensorListener=newLightSensorListener();
mSensorManager.registerListener(mLightSensorListener,lightSensor,SensorManager.SENSOR_DELAY_NORMAL);//注册事件监听
}
}
publicvoidstop(){
if(!mHasStarted||mSensorManager==null){
return;
}
mHasStarted=false;
mSensorManager.unregisterListener(mLightSensorListener);
}
/**
*获取光线强度
*/
publicfloatgetLux(){
if(mLightSensorListener!=null){
returnmLightSensorListener.lux;
}
return-1.0f;//默认返回-1,表示设备无光线传感器或者为调用start()方法
}
privateclassLightSensorListenerimplementsSensorEventListener{
privatefloatlux;//光线强度
publicvoidonAccuracyChanged(Sensorsensor,intaccuracy){
}
publicvoidonSensorChanged(SensorEventevent){
if(event.sensor.getType()==Sensor.TYPE_LIGHT){
//获取光线强度
lux=event.values[0];
if(DEBUG){
Log.d(TAG,"lux:"+lux);
}
}
}
}
}
对于这个光线强度的值。越暗数值越低,最低应该是0,在白天室内大概有300左右,仅供参考,不知道不同的设备会不会存在一定误差。
调用程序就不贴了,通过log就可以很直接的看得到数据了。这个类在我的自定义相机里自动调节曝光程度使用到了,效果还是有的。
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android资源操作技巧汇总》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。