onSensorChanged ,每 10 秒比较一次传感器数据

onSensorChanged , Compare sensor data every 10 seconds

我的代码:

@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 函数只在第一时间起作用time.After这是垃圾消息。

您可以简单地从 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) {

    }
};