private class accListener implements SensorEventListener{  
   @Override
   public void onSensorChanged(SensorEvent event) {
    
     if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
               long currentTime = System.currentTimeMillis();
               long gabOfTime = (currentTime - lastTime);
     

               if (gabOfTime > 500) {
                   lastTime = currentTime;
     

                   x = event.values[SensorManager.DATA_X];
                   y = event.values[SensorManager.DATA_Y];
                   z = event.values[SensorManager.DATA_Z];     

                   speed = Math.abs(x + y + z - lastX - lastY - lastZ) /

                           gabOfTime * 10000;

     

                   if (speed > SHAKE_THRESHOLD) {
                       // 이벤트 발생!! 

                    vibe.vibrate(200);
                     count++;
                    startHandler(count);
                    if(count >3){
                     count = 0;
                    }
               
                   }
                   lastX = event.values[DATA_X];
                   lastY = event.values[DATA_Y];
                   lastZ = event.values[DATA_Z];
                   //shaking=false;
               }
           }
       }

   @Override
   public void onAccuracyChanged(Sensor sensor, int accuracy) {
    // TODO Auto-generated method stub
    
   }      
          }
   public void onAccuracyChanged(Sensor sensor, int accuracy) {   
         }   

 

 

주요 소스는 이거이구요,,.

어플 목적이 쉐이킹 1번,2번,3번 을 정확히 인지해야 하거든요?

근데 한번 쉐이킹을 하면 2번, 많으면 5번까지 올라가요..

SHAKE_THRESHOLD 는 800으로 잡았구요

SHAKE_THRESHOLD와 gabOfTime의 숫자를 계속 변경해보아도 결과는 비슷비슷하고

너무 크게 숫자를 변경하면 아무리 세게 흔들어도 쉐이킹 1번 감지가 힘들고 이렇게 되네요ㅜㅜ

 

혹시 다른 대안 소스코드나 방법같은거 없을까요..

부탁드려요 고수님들 ㅜㅜ