摩托罗拉Droid(Milestone)上的Android SENSOR_PROXIMITY / SENSOR_LIGHT

时间:2010-08-30 03:51:19

标签: android

我正在尝试使用以下代码读取接近传感器的状态(我也尝试读取光传感器...):

@Override
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    txtStatus = (TextView)findViewById(R.id.txtStatus);
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    sensorManager.registerListener(this, SensorManager.SENSOR_PROXIMITY);
}

@Override
protected void onStart() {
    super.onStart();
    sensorManager.registerListener(this, SensorManager.SENSOR_LIGHT);
}

@Override
public void onResume(){
    super.onResume();
    sensorManager.registerListener(this, SensorManager.SENSOR_LIGHT);
}

@Override
protected void onPause() {
  super.onPause();
  sensorManager.unregisterListener(this, SensorManager.SENSOR_LIGHT);
}

当传感器发生变化时,txtStatus会更改默认文本(当我尝试读取加速计时,它可以工作......),但是当我阻挡光传感器时没有任何反应。

当我正在通话时,传感器正常工作(当我用手挡住传感器时屏幕关闭)。

我在这里遗漏了什么?

此致 安德烈

2 个答案:

答案 0 :(得分:2)

哦,我在registerListener上使用了错误的参数...

而不是

sensorManager.registerListener(this, SensorManager.SENSOR_LIGHT);

使用:

sensorManager.registerListener(sensorEventListener, sensorManager
                .getDefaultSensor(Sensor.TYPE_PROXIMITY),
                SensorManager.SENSOR_DELAY_FASTEST);

现在有效!

答案 1 :(得分:0)

这是你的全部代码吗?我想你必须用下面的代码实现SensorEventListener

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_LIGHT) {
        Log.i(TAG, "Light Change :" + event.values[0] );
    }
    if (event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
        Log.i(TAG, "PROXIMITY Change :" + event.values[0] );
    }
}

此外,为什么要注册传感器这么多?