デバイスの向きを検出して、表面に逆さまに配置されているかどうかを確認し、その上でメソッドを呼び出しています。私が遭遇した問題は、ユーザーが意図せずにデバイスの向きをその位置に一瞬だけ変えて、エラーを修正するために上向きの位置に戻す可能性があるという事実ですが、メソッドは最初に実行したときにまだ呼び出されます。
ユーザーがそのメソッドがトリガーされる前に向きを修正する時間があるように、800ms の遅延で向きに「ダブルチェック」を追加しようとしています。残念ながらonSensorChanged
、意図しない向きの変更を防ぐために向きを再確認する 800 ミリ秒の遅延を伴うスレッドを追加するために、 が呼び出される頻度を制御することはできません。
私のコードは次のとおりです。
public SensorEventListener accelerometerListener = new SensorEventListener(){
@Override
public void onSensorChanged(SensorEvent event) {
float z_value = event.values[2];
if (z_value < 0) {
//the device is now upside-down
try {
Thread.sleep(800);
//this if statement is never called correctly because
// onSensorChanged is not called again.
if (z_value < 0) {
toggleMethod();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
私の質問:onSensorChanged
二重チェックを実行するために、onSensorChanged メソッド自体の中で遅延を呼び出す方法はありますか?