Android编程使用光线传感器获取光线强弱的方法【LightSensorManager封装类】
程序员文章站
2023-11-12 09:13:46
本文实例讲述了android编程使用光线传感器获取光线强弱的方法。分享给大家供大家参考,具体如下:
在android开发中,有时我们需要获知设备所在环境的光线强弱情况,当...
本文实例讲述了android编程使用光线传感器获取光线强弱的方法。分享给大家供大家参考,具体如下:
在android开发中,有时我们需要获知设备所在环境的光线强弱情况,当然这需要我们设备拥有光线传感器。通常我们手机的屏幕自动亮度都是用光线传感器来实现的。该传感器在前置摄像头附近,此外,还有一个距离传感器。这里我们主要讲解如何使用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就可以很直接的看得到数据了。这个类在我的自定义相机里自动调节曝光程度使用到了,效果还是有的。
更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android视图view技巧总结》、《android编程之activity操作技巧总结》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android资源操作技巧汇总》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。