1

我有一个要求,当传感器值发生变化时,需要相应地显示一些数据。

目前我正在做的是,如果当前方位角值和之前的方位角值有 10 度的变化,则执行一些操作。

问题是,每改变 10 度(正如我在代码中提到的),就会执行操作。我不希望每改变 10 度就执行此操作。每当设备停止旋转时,都要考虑方位角值并执行操作。我也用过计数器。但是没有用。这是要了我的命。

这是我的代码,

 public void onSensorChanged(SensorEvent paramAnonymousSensorEvent) {

        CameraSearch.this.azimuth = paramAnonymousSensorEvent.values[0];

        CountDownTimer myCountDown = new CountDownTimer(2000, 1000) {
            public void onTick(long millisUntilFinished) {
                // update the UI with the new count
            }

            public void onFinish() {
                Log.d("","Counter finished");
                if (Math.abs(CameraSearch.this.azimuth - previousAzimuth) >= 10) {

                    Log.d("", "Azimuth: " + CameraSearch.this.azimuth
                            + "PreviousAzimuth: " + previousAzimuth);
                    CameraSearch.this.findScreenOrientation();
                    previousAzimuth = CameraSearch.this.azimuth;
                }
            }
        };
        // start the countDown
        myCountDown.start();

    }
};

请建议我解决方案。当用户停止旋转设备时,将采用当前方位角值并执行操作。请帮帮我!!

提前致谢!!

4

1 回答 1

0

没有简单的方法可以实现您想做的事情。我想到的是您跟踪方位角的标准偏差并在它低于某个阈值时触发您的动作。您需要的是一种算法,它可以在新样本进入时跟踪标准偏差而不存储它们,它被称为在线算法。你可以在这里找到它的一个例子:

https://en.wikipedia.org/wiki/Standard_deviation#Rapid_calculation_methods

为了确定阈值,我建议您收集一些数据并查看您可以预期的典型值并做出相应的决定。

于 2013-06-04T05:52:48.200 回答