センサー速度の値のカスタム値はうまく機能しません。
クラスを調べると、すべての .registerListener() メソッドに「getDelay」関数があることがわかります。
public boolean registerListener(SensorEventListener listener, Sensor sensor, int rateUs,
int maxBatchReportLatencyUs) {
int delay = getDelay(rateUs);
return registerListenerImpl(listener, sensor, delay, null,maxBatchReportLatencyUs, 0);
}
これも同じクラスで定義されています。
private static int getDelay(int rate) {
int delay = -1;
switch (rate) {
case SENSOR_DELAY_FASTEST:
delay = 0;
break;
case SENSOR_DELAY_GAME:
delay = 20000;
break;
case SENSOR_DELAY_UI:
delay = 66667;
break;
case SENSOR_DELAY_NORMAL:
delay = 200000;
break;
default:
delay = rate;
break;
}
return delay;
}
したがって、通常はカスタム値を設定することができます。ただし、約 100 ミリ秒 (100000マイクロ秒)を超えるカスタム値を使用しようとすると、イベント間の測定時間が 1000 ミリ秒まで跳ね上がり、そこにとどまる可能性があります。1000 ミリ秒、2000 ミリ秒、またはそれ以上のミリ秒を設定しても、イベント間の時間は依然として約 1000 ミリ秒です。
SENSOR_DELAY_NORMAL (= 200 ミリ秒) を使用して、毎回チェックすることで十分な時間が経過した場合にイベントをキャッチすることができます (David のように) より高い場合は、このエナリドレインアプローチを使用しないでください - 代わりに、sensorListener を登録して値をキャッチし、それを登録解除します毎回。