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

Android开发中,有时我们需要获知设备所在环境的光线强弱情况,当然这需要我们设备拥有光线传感器


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


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

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

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


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


[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import android.content.Context;  
  2. import android.hardware.Sensor;  
  3. import android.hardware.SensorEvent;  
  4. import android.hardware.SensorEventListener;  
  5. import android.hardware.SensorManager;  
  6. import android.util.Log;  
  7.   
  8. public class LightSensorManager {  
  9.   
  10.     private static final boolean DEBUG = true;  
  11.     private static final String TAG = "LightSensor";  
  12.   
  13.     private static LightSensorManager instance;  
  14.     private SensorManager mSensorManager;  
  15.     private LightSensorListener mLightSensorListener;  
  16.     private boolean mHasStarted = false;  
  17.   
  18.     private LightSensorManager() {  
  19.     }  
  20.   
  21.     public static LightSensorManager getInstance() {  
  22.         if (instance == null) {  
  23.             instance = new LightSensorManager();  
  24.         }  
  25.         return instance;  
  26.     }  
  27.   
  28.     public void start(Context context) {  
  29.         if (mHasStarted) {  
  30.             return;  
  31.         }  
  32.         mHasStarted = true;  
  33.         mSensorManager = (SensorManager) context.getApplicationContext().getSystemService(Context.SENSOR_SERVICE);  
  34.         Sensor lightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); // 获取光线传感器  
  35.         if (lightSensor != null) { // 光线传感器存在时  
  36.             mLightSensorListener = new LightSensorListener();  
  37.             mSensorManager.registerListener(mLightSensorListener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL); // 注册事件监听  
  38.         }  
  39.     }  
  40.   
  41.     public void stop() {  
  42.         if (!mHasStarted || mSensorManager == null) {  
  43.             return;  
  44.         }  
  45.         mHasStarted = false;  
  46.         mSensorManager.unregisterListener(mLightSensorListener);  
  47.     }  
  48.   
  49.     /** 
  50.      * 获取光线强度 
  51.      */  
  52.     public float getLux() {  
  53.         if (mLightSensorListener != null) {  
  54.             return mLightSensorListener.lux;  
  55.         }  
  56.         return -1.0f; // 默认返回-1,表示设备无光线传感器或者为调用start()方法  
  57.     }  
  58.   
  59.     private class LightSensorListener implements SensorEventListener {  
  60.   
  61.         private float lux; // 光线强度  
  62.   
  63.         public void onAccuracyChanged(Sensor sensor, int accuracy) {  
  64.         }  
  65.   
  66.         public void onSensorChanged(SensorEvent event) {  
  67.             if (event.sensor.getType() == Sensor.TYPE_LIGHT) {  
  68.                 // 获取光线强度  
  69.                 lux = event.values[0];  
  70.                 if (DEBUG) {  
  71.                     Log.d(TAG, "lux : " + lux);  
  72.                 }  
  73.             }  
  74.         }  
  75.   
  76.     }  
  77.   
  78. }  

对于这个光线强度的值。越暗数值越低,最低应该是0,在白天室内大概有300左右,仅供参考,不知道不同的设备会不会存在一定误差。

调用程序就不贴了,通过log就可以很直接的看得到数据了。这个类在我的自定义相机里自动调节曝光程度使用到了,效果还是有的。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值