获取光传感器值
Posted
技术标签:
【中文标题】获取光传感器值【英文标题】:Getting Light Sensor Value 【发布时间】:2011-09-20 00:07:22 【问题描述】:所以我正在寻找一种方法来在按下按钮时获取光传感器的当前值(显然以勒克斯为单位)。这是我用来实现光传感器控制的代码
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_ android:id="@+id/widget35" android:text="Start" android:layout_ android:layout_x="112dp" android:layout_y="249dp" android:onClick="onButtonDown"></Button>
当应用程序在后台运行时,我如何获取当前的勒克斯值,以及我如何获取按钮按下时的当前勒克斯值并将其存储到int maxLux;
?
【问题讨论】:
【参考方案1】:如 here 所述,无法直接获取当前传感器值,而一些较新版本的 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
改变以上是关于获取光传感器值的主要内容,如果未能解决你的问题,请参考以下文章