我正在尝试编写一个非常基本的光度计应用程序,以便将我的Galaxy S2作为传感器与我的旧35毫米相机配合使用。
首先,我应该指出,这款手机有一个隐藏/测试模式,可以通过在拨号键盘上输入“星号井零星号井”,然后选择“传感器”来进行选择。这将使光传感器可用,显示Lux值范围,在光水平变化时,值从5到2000以上,步长为5。
我编写的非常简单的概念验证代码仅会向我显示三个值,即10、100和1000,其范围相同。我的代码如下:
首先,我应该指出,这款手机有一个隐藏/测试模式,可以通过在拨号键盘上输入“星号井零星号井”,然后选择“传感器”来进行选择。这将使光传感器可用,显示Lux值范围,在光水平变化时,值从5到2000以上,步长为5。
我编写的非常简单的概念验证代码仅会向我显示三个值,即10、100和1000,其范围相同。我的代码如下:
public class LightMeterActivity extends Activity implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor mLightSensor;
private float mLux = 0.0f;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
}
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mLightSensor,
SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
protected void onPause() {
mSensorManager.unregisterListener(this);
super.onPause();
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_LIGHT) {
mLux = event.values[0];
String luxStr = String.valueOf(mLux);
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(luxStr);
Log.d("LUXTAG", "Lux value: " + event.values[0] );
}
}
}
有人能提供为什么会出现这种情况的建议吗?
我看到了这个问题:Nexus One上的光传感器只返回两个不同的值,但是这并没有帮助我。我不明白为什么内置测试模式可以看到完整的范围,而我的代码却不能。