2013-01-18 53 views
2

我試圖檢測左,右,上下搖晃。我研究並找到了這個代碼。檢測加速計抖動android

public void onSensorChanged(SensorEvent event) { 
      // TODO Auto-generated method stub 

      if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 

       float[] values = event.values; 

       // Movement 
       float x = values[0]; 
       float y = values[1]; 
       float z = values[2]; 


       long actualTime = System.currentTimeMillis(); 
       if ((actualTime - lastUpdate) > 100) 
       { 
        long diffTime = (actualTime - lastUpdate); 
        lastUpdate = actualTime; 


        if(Round(x,4)>8.0000){ 
         Log.d("sensor", "=====LEFT===="); 


        } 
        else if(Round(x,4)<-8.0000){ 
         Log.d("sensor", "=====RIGHT===="); 

        } 
        else if(Round(z,4) < -0.0){ 
         Log.d("sensor", "=====UP===="); 


        } 

        else if(Round(y,4) < 1.0){ 
         Log.d("sensor", "=====DOWN===="); 

        } 

       float speed = Math.abs(x+y+z - last_x - last_y - last_z)/diffTime * 10000; 

       if (speed > SHAKE_THRESHOLD) { 
        //Log.d("sensor", "shake detected w/ speed: " + speed); 
        //Toast.makeText(this, "shake detected w/ speed: " + speed, Toast.LENGTH_SHORT).show(); 
       } 
       last_x = x; 
       last_y = y; 
       last_z = z; 
       } 
      } 

     } 

我試圖去研究它,但我有一些問題。
1.每次震動檢測後,我可以在哪裏設置延遲?我希望它在檢測到最後一次震動1秒後檢測到震動。
2.爲什麼如果我把它放在一個平坦的表面,它總是檢測到下來。
3.我無法檢測到正確的動作抖動

任何幫助和建議,將不勝感激。

回答

0

首先,這代碼出現來檢測運動,而不是一搖(這裏我理解動搖是肚裏的一種方式運動,然後背除外),這可能會引起問題,你怎麼理解它的工作。

我在哪裏可以設置抖動檢測後延遲每?我希望它在檢測到最後一次震動1秒後檢測到震動。

if ((actualTime - lastUpdate) > 100)就是檢測之間的時間間隔發生 - 在100這裏告訴程序只能看到什麼變化後100毫秒,所以如果你想1秒,將其更改爲1000

爲什麼如果我把它放在平坦的表面上,它總是會檢測到。

我並不完全確定上下文和方向,因爲它不清楚,但不要忘記,當你認爲它可能不在你的空間,但在電話的,當電話直立時,只有下降。如果手機是在它的背部,左和右是相同的,但向下(即朝向地面)實際上是回傳感器,因爲它是對手機的背面。

  1. 我無法檢測到正確的運動動搖

TBH我不知道爲什麼,代碼似乎在這裏很好。可能是一個電話的事情,可能是實施方面的問題(正如我所說,上面的代碼是運動的整體,而不是回訪「搖」,所以它可能是你怎麼搖它的權利,以測試這不是觸發它,但你搖左邊是觸發它

+0

謝謝你的解釋。那麼,這個代碼是正好適合我的應用程序,你能提出一個解決方案,以防止運動,它放置在平面上時?正確的運動讓我頭疼。 – ljpv14