获得光传感器价值

时间:2011-06-22 01:24:31

标签: java android controls sensor

所以我正在寻找一种方法来获得按钮按下时光传感器的当前值(显然是在Lux中)。这是我用来实现光传感器控制的代码

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 个答案:

答案 0 :(得分:8)

如上所述here,无法直接获取当前传感器值,而一些更新版本的Android会在注册器注册后立即生成onSensorChanged事件(允许您获取基线),早期版本没有。因此,您唯一能做的就是希望用户运行更新版本的Android或更改值,然后从onSensorChanged(例如)中的event.values [0]中检索当前的勒克斯值:

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

(将maxLux和currentLux更改为浮点数后)。这就留下了根据按下按钮检索当前值的问题,这可以通过查看按下按钮时currentLux的值来完成。