Я хочу иметь возможность использовать довольно простой алгоритм обнаружения падения в моем приложении. На данный момент в onSensorChanged() я получаю абсолютное значение текущих значений x, x, z и вычитаю из этого SensorManager.GRAVITY_EARTH (9.8 м/с). Результирующее значение должно быть больше порогового значения 10 раз подряд, чтобы установить флаг, указывающий, что падение было обнаружено акселерометром, пороговое значение составляет около 8 м/с.
Кроме того, я сравниваю ориентацию телефона, как только порог был пройден, и его ориентация, когда порог больше не передается, это устанавливает другой флаг, указывающий, что датчик ориентации обнаружил падение.
Когда оба флажка установлены, происходит событие, чтобы проверить, нормально ли он и т.д. и т.д. Моя проблема связана с порогом, когда телефон держится прямо, абсолютное значение акселерометра составляет около 9,8 м/с, но когда я держите его еще под углом, это может быть более 15 м/с. Это приводит к тому, что другие события инициируют обнаружение падения, и если я увеличу порог, чтобы этого избежать, он не обнаружит падения.
Может ли кто-нибудь дать мне несколько советов здесь, какие возможные значения я должен использовать или как улучшить мой метод? Большое спасибо.