onSensorChanged, сравнивать данные датчика каждые 10 секунд - PullRequest
0 голосов
/ 01 февраля 2020

Мой код:

@Override
        public void onSensorChanged(SensorEvent event) {
            float f1 = event.values[0];
            float f2 = event.values[1];
            float f3 = event.values[2];

            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(context,"10 second",Toast.LENGTH_SHORT).show();
                    new Handler().postDelayed(this, 10000);
                }
            }, 10000);

            this.LastX = event.values[0];
            this.LastY = event.values[1];
            this.LastZ = event.values[2];

            float f4 = Math.abs(this.LastX - f1);
            float f5 = Math.abs(this.LastY - f2);
            float f6 = Math.abs(this.LastZ - f3);

            if(f4<0.003 && f5<0.003 && f6<0.003){
                MainActivity.LockState = true;
//                Toast.makeText(context,"Düz zemin",Toast.LENGTH_LONG).show();
            }

        }


Я пытаюсь сравнивать данные датчика каждые 10 секунд, но функция postDelayed работает только в первый раз. После этого всплывающее сообщение является спамом.

1 Ответ

0 голосов
/ 01 февраля 2020

Вы можете просто получить метку времени из SensorEvent и проверить, есть ли разница в 10 секунд между последней и текущей метками времени. Например:

private SensorEventListener sensorEventListener = new SensorEventListener() {
    private long lastTimestamp;

    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
        long currentTimestamp = sensorEvent.timestamp;
        if (currentTimestamp - lastTimestamp >= TimeUnit.SECONDS.toNanos(10)) {
            lastTimestamp = currentTimestamp;
            Toast.makeText(mContext, "10 seconds", Toast.LENGTH_SHORT).show();
            //Here you can compare sensor data
        }

    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int i) {

    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...