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

Shake event works differently on various devices Shake Event custom implementation

我正在为我的应用程序开发简单的摇一摇功能,但我遇到了一个奇怪的问题。当我在我的 Honor5x 上测试它时,它就像一个魅力,但当我试图在三星 S5 上执行它时,它太敏感了。加速度计在不同设备上的工作方式是否可能不同?如果是这样,是否可以根据 device/accelerometer 准确性修改条件? 这是我检测摇动事件的代码: </p> <pre> 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(); } } }

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

他们在一定时期内采集样本,如果这些样本中有3/4在加速,那就意味着发生了震动。