[Android相机]光线传感器识别环境光亮强度

关于Android相机的开发流程可以看前一篇文章, 

 [Android 相机]Android 相机开发的基本流程

https://blog.csdn.net/bluewindtalker/article/details/54563910

众所周知,一般Android手机若要识别当前环境亮度,大部分可以通过自带的光线传感器来识别,当然环境传感器包括多项数据分别是环境温度、亮度、环境压力、环境湿度、设备温度等。

CAMERA(12)---[Android相机]光线传感器识别环境光亮强度_第1张图片

下面我们仅就光线进行说明分析,以下代码是光线传感器的工具类

[java]  view plain  copy
  1. package com.bluewindtalker.camera.demo;  
  2.   
  3. import android.content.Context;  
  4. import android.hardware.Sensor;  
  5. import android.hardware.SensorEvent;  
  6. import android.hardware.SensorEventListener;  
  7. import android.hardware.SensorManager;  
  8.   
  9. /** 
  10.  * @author bluewindtalker 
  11.  * @description 光线传感器工具 
  12.  * @date 2018/4/15-下午12:08 
  13.  */  
  14. public final class LightSensorUtil {  
  15.   
  16.     private LightSensorUtil() {  
  17.     }  
  18.   
  19.     public static SensorManager getSenosrManager(Context context){  
  20.         return  (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);  
  21.   
  22.     }  
  23.   
  24.     /** 
  25.      * 注册光线传感器监听器 
  26.      * @param sensorManager 
  27.      * @param listener 
  28.      */  
  29.     public static void registerLightSensor(SensorManager sensorManager,SensorEventListener listener) {  
  30.         if(sensorManager == null || listener == null){  
  31.             return;  
  32.         }  
  33.         Sensor lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); // 获取光线传感器  
  34.         if (lightSensor != null) { // 光线传感器存在时  
  35.             sensorManager.registerListener(listener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL); // 注册事件监听  
  36.         }  
  37.     }  
  38.     /** 
  39.      * 反注册光线传感器监听器 
  40.      * @param sensorManager 
  41.      * @param listener 
  42.      */  
  43.     public static void unregisterLightSensor(SensorManager sensorManager,SensorEventListener listener) {  
  44.         if(sensorManager == null || listener == null){  
  45.             return;  
  46.         }  
  47.         sensorManager.unregisterListener(listener);  
  48.     }  
  49. }  

 然后我们看下监听器的实现细节。

[java]  view plain  copy
  1. private SensorEventListener lightSensorListener = new SensorEventListener() {  
  2.         @Override  
  3.         public void onSensorChanged(SensorEvent event) {  
  4.             if (event.sensor.getType() == Sensor.TYPE_LIGHT) {  
  5.                 //光线强度  
  6.                 float lux = event.values[0];  
  7.                 Log.e(TAG, "光线传感器得到的光线强度-->" + lux);  
  8.             }  
  9.         }  
  10.   
  11.         @Override  
  12.         public void onAccuracyChanged(Sensor sensor, int accuracy) {  
  13.         }  
  14.     };  

这里我们要注意下,谷歌官方提到

最好在onResume注册和onPause里面反注册传感器,为了防止高耗能。

 这里我们直接在onSensorChanged方法里进行触发回调即可,但是这个回调是当光线亮度发生变化的时候才会触发回调,不会定时回调的,同时大部分光线传感器都设置安装在手机的正面,导致无法使用手机背面的摄像头捕捉亮度,于是乎我们不得不再次通过技术的方式来从摄像头来识别周围环境光强度。请看下篇文章。

[Android相机]通过手机摄像头识别环境亮度

本文demo在 https://github.com/bluewindtalker/camerademo

涉及到的谷歌官方的demo是https://developer.android.com/guide/topics/sensors/sensors_environment.html

更多相关文章

  1. Android 利用TCP通信 实现环境数据解析显示及控制指令下发
  2. Android SDK 2.2 开发环境搭建
  3. Android编译环境 相关
  4. Android编程: 环境搭建、基本知识
  5. mac添加android的adb等工具到环境变量
  6. android搭建环境错误 daemon not running. starting it now on p

随机推荐

  1. Android 将一个数据对象保存到本地以及读
  2. Android(安卓)Binder 分析——匿名共享内
  3. android常用代码积累
  4. 初学Android时遇到的一些错误及解决办法
  5. Android Jetpack-Navigation简单使用
  6. 通过Button改变TextView文字颜色
  7. Android AlertDialog包含EditText,软键盘
  8. Android学习笔记1 ——资源 (一)
  9. android之EditText文本监听(addTextChang
  10. android中封装http请求