[Android相机]光线传感器识别环境光亮强度
关于Android相机的开发流程可以看前一篇文章,
[Android 相机]Android 相机开发的基本流程
https://blog.csdn.net/bluewindtalker/article/details/54563910众所周知,一般Android手机若要识别当前环境亮度,大部分可以通过自带的光线传感器来识别,当然环境传感器包括多项数据分别是环境温度、亮度、环境压力、环境湿度、设备温度等。
下面我们仅就光线进行说明分析,以下代码是光线传感器的工具类
- package com.bluewindtalker.camera.demo;
- import android.content.Context;
- import android.hardware.Sensor;
- import android.hardware.SensorEvent;
- import android.hardware.SensorEventListener;
- import android.hardware.SensorManager;
- /**
- * @author bluewindtalker
- * @description 光线传感器工具
- * @date 2018/4/15-下午12:08
- */
- public final class LightSensorUtil {
- private LightSensorUtil() {
- }
- public static SensorManager getSenosrManager(Context context){
- return (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
- }
- /**
- * 注册光线传感器监听器
- * @param sensorManager
- * @param listener
- */
- public static void registerLightSensor(SensorManager sensorManager,SensorEventListener listener) {
- if(sensorManager == null || listener == null){
- return;
- }
- Sensor lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); // 获取光线传感器
- if (lightSensor != null) { // 光线传感器存在时
- sensorManager.registerListener(listener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL); // 注册事件监听
- }
- }
- /**
- * 反注册光线传感器监听器
- * @param sensorManager
- * @param listener
- */
- public static void unregisterLightSensor(SensorManager sensorManager,SensorEventListener listener) {
- if(sensorManager == null || listener == null){
- return;
- }
- sensorManager.unregisterListener(listener);
- }
- }
然后我们看下监听器的实现细节。
- private SensorEventListener lightSensorListener = new SensorEventListener() {
- @Override
- public void onSensorChanged(SensorEvent event) {
- if (event.sensor.getType() == Sensor.TYPE_LIGHT) {
- //光线强度
- float lux = event.values[0];
- Log.e(TAG, "光线传感器得到的光线强度-->" + lux);
- }
- }
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
- };
这里我们要注意下,谷歌官方提到
最好在onResume注册和onPause里面反注册传感器,为了防止高耗能。
这里我们直接在onSensorChanged方法里进行触发回调即可,但是这个回调是当光线亮度发生变化的时候才会触发回调,不会定时回调的,同时大部分光线传感器都设置安装在手机的正面,导致无法使用手机背面的摄像头捕捉亮度,于是乎我们不得不再次通过技术的方式来从摄像头来识别周围环境光强度。请看下篇文章。
本文demo在 https://github.com/bluewindtalker/camerademo
涉及到的谷歌官方的demo是https://developer.android.com/guide/topics/sensors/sensors_environment.html