中古のLG Nexus 4、Android 4.3
戻り値が false になることがありますが、その理由がわかりません。ドキュメントには、「センサーがサポートされ、正常に有効化されている場合は true」と記載されています。
奇妙なのは、SensorManager.registerListener からの戻り値をテストする例を見たことがないことです。
奇妙なことに、false 値が返されることを無視すると、すべてが期待どおりに機能します。
ドキュメント: 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;
奇妙な偽の戻り値は、Android 4.3 より前では発生しませんでした
したがって、すべての例のように結果値が使用されていなければ、すべて問題ありません。たぶんそれで満足するはずですが、3つの質問があります:
- この戻り値が例でテストされていないのはなぜですか?
- Android 4.3 で戻り値が false になるのはなぜですか?
- 戻り値が false でも機能するのはなぜですか?
これらの質問に答えるのが難しいことは理解していますが、他の誰かが同じ問題を抱えているという情報を得ることができれば、とてもうれしいです.
Sensor.TYPE_ACCELEROMETER と Sensor.TYPE_PROXIMITY の両方で同じ動作が得られました