public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
long currentTime = System.currentTimeMillis();
long gabOfTime = (currentTime - lastTime);
if (gabOfTime > 100) {
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) {
run();
//mp.stop();
}
lastX = event.values[DATA_X];
lastY = event.values[DATA_Y];
lastZ = event.values[DATA_Z];
}
}
}
public void run() {
// TODO Auto-generated method stub
while(true){
// Update 메시지 보냄
if (speed != SHAKE_THRESHOLD) {
count++;
}
handler.sendMessage(Message.obtain(handler, UPDATE));
}
}
public final static int UPDATE = 0;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case UPDATE:
// 메시지 처리
if(count > 20)
mp.stop();
finish();
break;
}
};
};
빨간부분이 흔들었음을 감지하는 부분입니다. 그런데 거기가 한번만 움직이면 처리가 되서 20번 흔들면 mp가 종료되게 했는데 폰에서 작동시키니까 그냥 뻗어 버립니다... 어디가 틀렸는지 어떻게해야대는지 아시는대로좀 가르켜 주세요




run은 스레드 생성 이후 부르시고 speed > SHAKE_THRESHOLD 일 경우 멤버변수 값을 증가시켜서,
스레드에서 값이 20번일 때 원하시는 동작을 하도록 변경해보시기 바랍니다.
그리고 스레드에 sleep을 적당히(?) 주시기 바랍니다.
if (speed > SHAKE_THRESHOLD) {
count++;
// run();
//mp.stop();
}
public void run() {
while(true)
{
if(count == 20)
{
handler.sendMessage(Message.obtain(handler, UPDATE));
}
else
{
// sleep();
}
}
}