CAMERA(12)---[Android相机]光线传感器识别环境光亮强度

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

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

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

https://blog.youkuaiyun.com/bluewindtalker/article/details/54563910

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


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

[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

20160630全志R8点亮ov7670.txt 开发板:杭州若格科技,全志R8(Cortex A8) android4.2.2/linux3.4.39 2016/6/30 15:17 1、配置ov7670在android层配置的分辨率为vga(预览/拍照/录像) R:\wyb\ov7670_ruoge_kerun_r8\android\device\softwinner\nuclear-evb\camera.cfg ;------------------------------------------------------------------------------- ; 用于camera的配置 ; ; 采用格式: ; key = key_value ; 注意: 每个key需要顶格写; ; key_value紧跟着key后面的等号后面, 位于同一行中; ; key_value限制大小为256字节以内; ; ;------------------------------------------------------------------------------- ;------------------------------------------------------------------------------- ; 1 for single camera, 2 for double camera ;------------------------------------------------------------------------------- number_of_camera = 1 ;------------------------------------------------------------------------------- ; CAMERA_FACING_BACK ; gc0308 ;------------------------------------------------------------------------------- camera_id = 0 ;------------------------------------------------------------------------------- ; 1 for CAMERA_FACING_FRONT ; 0 for CAMERA_FACING_BACK ;------------------------------------------------------------------------------- camera_facing = 0 ;------------------------------------------------------------------------------- ; camera orientation (0, 90, 180, 270) ;------------------------------------------------------------------------------- camera_orientation = 0 ;------------------------------------------------------------------------------- ; driver device name ;------------------------------------------------------------------------------- camera_device = /dev/video0 ;------------------------------------------------------------------------------- ; device id ; for two camera devices with one CSI ;------------------------------------------------------------------------------- device_id = 0 used_preview_size = 1 key_support_preview_size = 640x480 key_default_preview_size = 640x480 used_picture_size = 1 key_support_picture_size = 640x480
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值