[Android Camera] Light sensor recognizes ambient light intensity
For the development process of Android camera, you can see the previous article,
[Android Camera] The basic process of Android camera development
https://blog.csdn.net/bluewindtalker/article/details/54563910As we all know, if an Android phone wants to identify the current ambient brightness, most of it can be identified by its own light sensor. Of course, the environmental sensor includes a number of data including ambient temperature, brightness, ambient pressure, ambient humidity, and device temperature.
Below we only explain and analyze the light, the following code is the tool class of the light sensor
- 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 light sensor tool
- * @date 4/15/2018 - 12:08pm
- */
- publicfinalclass LightSensorUtil {
- private LightSensorUtil() {
- }
- publicstatic SensorManager getSenosrManager(Context context){
- return (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
- }
- /**
- * Register light sensor listener
- * @param sensorManager
- * @param listener
- */
- publicstaticvoid registerLightSensor(SensorManager sensorManager,SensorEventListener listener) {
- if(sensorManager == null || listener == null){
- return;
- }
- Sensor lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); // Get the light sensor
- 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
The official Google demo involved is https://developer.android.com/guide/topics/sensors/sensors_environment.html