欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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程序设计有所帮助。