有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我的代码:

@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) 个答案

  1. # 1 楼答案

    您只需从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) {
    
        }
    };