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번 감지가 힘들고 이렇게 되네요ㅜㅜ
혹시 다른 대안 소스코드나 방법같은거 없을까요..
부탁드려요 고수님들 ㅜㅜ