android – 光传感器代码返回有限的值范围

我正在尝试编写一个非常基本的测光表应用程序,用于我的旧35mm相机,使用我的Galaxy S2作为传感器.

我首先要指出的是,通过在拨号盘上输入星形哈希零星哈希,然后选择“传感器”,可以选择此手机上的隐藏/测试模式.这使得光传感器可用,当我改变光水平时,该光传感器以5的步长显示在5和2000之间变化的Lux值范围.

我编写的非常简单的概念证明代码只会向我显示三个值,即在相同的照明条件范围内分别为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] );

        }
    }
}

任何人都可以建议为什么会这样?

我见过问题Light sensor on Nexus One returns only two distinct values
这根本没有帮助.我无法理解内置测试模式如何能够看到整个范围而我的代码却无法看到.

解决方法

我只在Galaxy S2上测试了这个,但我能看到真正价值的唯一方法是直接获取系统设备文件:
#cat "/sys/devices/virtual/lightsensor/switch_cmd/lightsensor_file_state"

或者在java中:

Scanner st = new Scanner(new File("/sys/devices/virtual/lightsensor/switch_cmd/lightsensor_file_state"));
int lux = st.nextInt();
st.close();

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...