Android 4.3中android.hardware.SensorManager.registerListener的意外错误返回值

Pau*_*rin 5 android sensor accelerometer proximity proximitysensor

二手LG Nexus 4,Android 4.3

返回值有时是假的,我不明白为什么.文档说:"如果传感器得到支持并成功启用,则为true."

奇怪的是,我见过的没有例子是测试SensorManager.registerListener的返回值.

奇怪的是,如果我忽略了返回错误的值,那么一切都按预期工作!

文档:http: //developer.android.com/reference/android/hardware/SensorManager.html

android.hardware.SensorManager,android.hardware.SystemSensorManager

我的代码:

SensorManager sensorMgr = (SensorManager)_context.getSystemService(Context.SENSOR_SERVICE);
if (sensorMgr == null) {
    Log.w(TAG, "200410::Sensors not supported");
    return false;
}

Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_PROXIMITY);
result = sensorMgr.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
if( result == false) {
    // Normally something should be done here
    // since the false return value indicated that registration failed.
    // But I found it's better doing nothing since the registration seams to be ok
}
return result;
Run Code Online (Sandbox Code Playgroud)

在Android 4.3之前没有发生奇怪的错误返回值

所以,如果没有像所有例子那样使用结果值,那么一切都很好.也许我应该对此感到满意,但是,我有3个问题:

  1. 为什么这个返回值从未在示例中测试过?
  2. 为什么Android 4.3中的返回值为false?
  3. 即使返回值为false,为什么它仍然有效?

我理解这些问题很难回答,但如果我得到其他人有同样问题的信息,我会非常高兴.

我对Sensor.TYPE_ACCELEROMETER和Sensor.TYPE_PROXIMITY都有相同的行为