我正在为我的应用程序开发简单的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();
}
}
}