获取光传感器数值

7

我想寻找一种在按钮按下时获取光线传感器当前值(明显是以勒克斯为单位)的方法。以下是我用来实现对光线传感器控制的代码:

public class SensorActivity extends Activity implements SensorEventListener 
{
 private final SensorManager mSensorManager;
 private final Sensor mLight;
 int minLux = 0;
 int currentLux = 0;
 int maxLux;

 public SensorActivity() 
 {
     mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
     mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
 }

 protected void onResume() 
 {
     super.onResume();
     mSensorManager.registerListener((SensorEventListener) this, mLight, SensorManager.SENSOR_DELAY_NORMAL);
 }

 protected void onPause() 
 {
     super.onPause();
     mSensorManager.unregisterListener((SensorListener) this);
 }

 public void onAccuracyChanged(Sensor sensor, int accuracy) 
 {
     if(sensor.getType() == Sensor.TYPE_LIGHT)
     {

     }
 }

 public void onSensorChanged(SensorEvent event) 
 {
     if( event.sensor.getType() == Sensor.TYPE_LIGHT)
     {

     }
 }
 }

我也有这段代码,可以让按钮调用一个函数。
<Button android:layout_width="122px" android:id="@+id/widget35" android:text="Start" android:layout_height="wrap_content" android:layout_x="112dp" android:layout_y="249dp"  android:onClick="onButtonDown"></Button>

当应用程序在后台运行时,如何获取当前的光照值?在按下按钮时如何获取和存储当前的光照值到 int maxLux; 中?

1个回答

9

此处所述,直接获取当前传感器值是不可能的。虽然一些较新版本的Android会在监听器注册时生成onSensorChanged事件(允许您获得基线),但早期版本则不会。因此,您唯一能做的就是希望用户运行更高版本的Android系统或者等待数值变化,然后从onSensorChanged中的event.values[0]中检索当前的lux值。

 public void onSensorChanged(SensorEvent event) 
 {
     if( event.sensor.getType() == Sensor.TYPE_LIGHT)
     {
        currentLux = event.values[0];
        if (currentLux > maxLux)
          maxLux = currentLux;
     }
 }

(将maxLux和currentLux更改为浮点数后)现在需要解决的问题是根据按下按钮时的currentLux值来检索当前值。

谢谢帮忙!我只需要在它发生变化时才需要一个常量值。我对你的代码进行了一些调整。 maxLux 将是基于原始校准(按钮按下的内容)的常量,然后屏幕亮度将根据 currentLux 相对于 maxLux 的百分比进行更改。 - Cistoran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接