当前位置: 首页 > ai >正文

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

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

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

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

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

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

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


import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log;public class LightSensorManager {private static final boolean DEBUG = true;private static final String TAG = "LightSensor";private static LightSensorManager instance;private SensorManager mSensorManager;private LightSensorListener mLightSensorListener;private boolean mHasStarted = false;private LightSensorManager() {}public static LightSensorManager getInstance() {if (instance == null) {instance = new LightSensorManager();}return instance;}public void start(Context context) {if (mHasStarted) {return;}mHasStarted = true;mSensorManager = (SensorManager) context.getApplicationContext().getSystemService(Context.SENSOR_SERVICE);Sensor lightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); // 获取光线传感器if (lightSensor != null) { // 光线传感器存在时mLightSensorListener = new LightSensorListener();mSensorManager.registerListener(mLightSensorListener, lightSensor,SensorManager.SENSOR_DELAY_NORMAL); // 注册事件监听}}public void stop() {if (!mHasStarted || mSensorManager == null) {return;}mHasStarted = false;mSensorManager.unregisterListener(mLightSensorListener);}/*** 获取光线强度*/public float getLux() {if (mLightSensorListener != null) {return mLightSensorListener.lux;}return -1.0f; // 默认返回-1,表示设备无光线传感器或者为调用start()方法}private class LightSensorListener implements SensorEventListener {private float lux; // 光线强度public void onAccuracyChanged(Sensor sensor, int accuracy) {}public void onSensorChanged(SensorEvent event) {if (event.sensor.getType() == Sensor.TYPE_LIGHT) {// 获取光线强度lux = event.values[0];if (DEBUG) {Log.d(TAG, "lux : " + lux);}}}}}

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

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

http://www.xdnf.cn/news/11707.html

相关文章:

  • position的relative与absolute的区别
  • 非线性丙类功率放大器实验_倾斜光纤Bragg光栅:抑制高功率光纤激光系统SRS和SBS的理想选择...
  • 网安学习日志01:用kali复现ms17-010漏洞
  • 传奇私服游戏支付接口申请(已解决)
  • iTunes 9.0.3 更新
  • Linux系统服务之inetd
  • 445端口入侵详解
  • 用 Java 实现“人像动漫化”特效
  • Windows 安全基础——NetBIOS篇
  • 硬盘模式JBOD
  • C++实现银行家算法
  • 应用程序发生异常--未知的软件异常怎么办?
  • 【Android动画入门篇】
  • 寄存器分配图着色_着色基础------抗锯齿与半透明
  • Adobe Acrobat pro 9.0 序列号
  • 【硬核】优质 嵌入式C编程 必备指南
  • 张老师的生日究竟是哪天(经典推理题[转载])
  • php core,分析php core dump的原因
  • Unity3D入门基础知识汇总
  • 在线免费生成IntelliJ IDEA 15.0(16.+)注册码
  • tab切换之图片切换
  • a标签点击中文文件名乱码,通过a标签href属性跳转后台乱码问题
  • 电子合同签署平台有哪些?2024年靠谱10家对比
  • 深入剖析《开端》是如何找到引爆凶手的?
  • 802.11n无线网卡驱动linux,安装Broadcom Linux hybrid 无线网卡驱动总结
  • Visual Studio 11开发指南(1) Visual Studio 11简介与新特性
  • 微博明星事件421整合文档
  • 项目实战第四十七讲:易宝支付对接详解(保姆级教程)
  • acdsee 15中文版的许可证密钥+激活方法
  • 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。