2016-09-26 57 views
5

我正在爲我的應用程序開發簡單的搖動功能,並且遇到了一個奇怪的問題。當我在Honor5x上測試它時,它的功能就像是一種魅力,但是當我嘗試在三星S5上執行它時,它太敏感了。加速度計可能在不同設備上的工作方式有所不同嗎?如果是這樣的話,修改外設取決於設備/加速度計的精度? 這裏是我的用於檢測震動事件代碼: 搖動事件在各種設備上的工作方式不同搖動事件自定義實現

  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

你可以試試廣場庫抖動檢測 - seismic

他們收集一定期限內的樣本,如果這些樣本的3/4都在加速,然後這意味着有一個動搖。

+0

謝謝,這個庫工作得很好,我的情況:) –