Android编程使用光线传感器获取光线强弱的方法【LightSensorManager封装类】

 更新时间:2017年11月02日 10:08:27   作者:阿飞__  
这篇文章主要介绍了Android编程使用光线传感器获取光线强弱的方法,结合实例形式分析了Android光线传感器管理封装类LightSensorManager的具体实现技巧,需要的朋友可以参考下

本文实例讲述了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程序设计有所帮助。

相关文章

  • Android语音识别技术详解及实例代码

    Android语音识别技术详解及实例代码

    这篇文章主要介绍了Android语音识别技术的相关资料,并附实例代码及实例实现效果图,需要的朋友可以参考下
    2016-09-09
  • Android最简单的限制输入方法(只包含数字、字母和符号)

    Android最简单的限制输入方法(只包含数字、字母和符号)

    这篇文章主要给大家介绍了关于Android最简单的限制输入的实现方法,限制输入框只能输入数字、字母和符号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看 吧
    2018-11-11
  • AndroidQ(10)黑暗模式适配的实现

    AndroidQ(10)黑暗模式适配的实现

    这篇文章主要介绍了AndroidQ(10)黑暗模式适配的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Android ListView实现无限循环滚动

    Android ListView实现无限循环滚动

    这篇文章主要为大家详细介绍了Android ListView实现无限循环滚动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Flutter开发setState能否在build中直接调用详解

    Flutter开发setState能否在build中直接调用详解

    这篇文章主要为大家介绍了Flutter开发setState能否在build中直接调用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 解决Android7.0更新后无法安装的问题

    解决Android7.0更新后无法安装的问题

    项目中发现在自动更新功能的时候,下载好了apk的文件后在android7.0系统中不能自动跳到安装界面,后来搜索了一番解决了问题,但感觉没有描述清楚,所以补充一下。
    2017-12-12
  • Android绘制钟表的方法

    Android绘制钟表的方法

    这篇文章主要为大家详细介绍了Android绘制钟表的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • Android编程判断网络是否可用及调用系统设置项的方法

    Android编程判断网络是否可用及调用系统设置项的方法

    这篇文章主要介绍了Android编程判断网络是否可用及调用系统设置项的方法,涉及Android针对网络连接的判定及属性设置的调用,需要的朋友可以参考下
    2016-03-03
  • Android 实现伸缩布局效果示例代码

    Android 实现伸缩布局效果示例代码

    这篇文章主要介绍了Android 实现伸缩布局效果的示例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • Android自定义滑动删除效果的实现代码

    Android自定义滑动删除效果的实现代码

    这篇文章将从现有 Android 滑动删除的痛点,到搭建好一个基本的框架,到最终提供一份完整的 Demo为止,争取为读者提供最大的可定制化,需要的朋友可以参考下
    2018-03-03

最新评论