Я определяю ориентацию устройства, чтобы проверить, помещен ли он вверх дном на поверхность, а затем вызывает метод. Проблема, с которой я столкнулся, заключается в том, что пользователь может непреднамеренно переключить ориентацию устройства на эту позицию на долю секунды и вернуть лицевую позицию для исправления их ошибки, однако метод все еще называется первым, когда они это делают.SensorEvent onChanged Multithreading?
Я пытаюсь добавить «двойную проверку» к ориентации с задержкой в 800 мс, чтобы у пользователя было время исправить ориентацию до того, как этот метод будет запущен. К сожалению, я не могу контролировать, как часто вызывается 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 метода для того, чтобы преформ двойной проверки?
«Возможные потери точности Найдено:. Double Обязательно: Поплавок» –
да изменить тип z_value удвоиться, потому что event.values двойники – Turkish
«переменная z_value не может быть инициализирована» Я понятия не имею, что к но я действительно хочу попробовать ваше решение. –