Shake事件在各种设备上的工作方式不同Shake Event自定义实现

时间:2016-09-26 11:29:30

标签: android accelerometer shake

我正在为我的应用程序开发简单的Shake功能,我遇到了一个奇怪的问题。当我在我的Honor5x上进行测试时,它就像一个魅力,但当我尝试在三星S5上执行它时,它太敏感了。加速度计是否有可能在不同设备上的工作方式不同?如果可以,修改分类可能取决于设备/加速度计的准确度? 这是我检测Shake事件的代码:

        gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
        gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];

        float accX = event.values[0] - gravity[0];
        float accY = event.values[1] - gravity[1];
        float maxSpeed = Math.max(accX, accY);
        if (maxSpeed > SHAKE_THRESHOLD)
        {
            if(shakesInRow == 0){
                shakesInRow++;
                shakeTime = System.currentTimeMillis();
            }else{
                if((System.currentTimeMillis() - shakeTime) < SHAKE_TIME_DETECTOR){
                    shakesInRow++;
                }else{
                    shakesInRow = 0;
                    shakeTime = 0;
                    return;
                }
                if(shakesInRow>= SHAKE_IN_ROW) {
                    shakesInRow= 0;
                    runMainActivity();
                }
            }
        }

1 个答案:

答案 0 :(得分:1)

您可以尝试使用Square库进行抖动检测 - seismic

他们在一定时期内收集样本,如果这些样本中有3/4加速,则表示发生了摇晃。