가속센서를 이용한 단말 흔들림 체크

package com.kmshack.testapp;

import android.app.Activity;
import android.graphics.Color;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;

public class testapp extends Activity implements SensorEventListener {

private long lastTime; 
private float speed; 
private float lastX; 
private float lastY; 
private float lastZ; 


private float x, y, z; 
//민감도(수치가 낮을수록 민감)
private static final int SHAKE_THRESHOLD = 1000; 


private static final int DATA_X = SensorManager.DATA_X; 
private static final int DATA_Y = SensorManager.DATA_Y; 
private static final int DATA_Z = SensorManager.DATA_Z; 


TextView t;
int count=0;
private SensorManager sensorManager; 
private Sensor accelerormeterSensor; 


protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);

    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    accelerormeterSensor = sensorManager 
            .getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

    t = (TextView)findViewById(R.id.TextView01);

} 


@Override 
public void onStart() { 
    super.onStart(); 


    if (accelerormeterSensor != null) 
        sensorManager.registerListener(this, accelerormeterSensor, 
                SensorManager.SENSOR_DELAY_GAME); 
} 


@Override 
public void onStop() { 
    super.onStop(); 


    if (sensorManager != null) 
        sensorManager.unregisterListener(this); 
} 


@Override 
public void onAccuracyChanged(Sensor sensor, int accuracy) { 
} 


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

        //센서 동작이 이전/이후 시간의 차이가 0.1초 이내이면
        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) 
            { 
                // 이벤트 발생!! 
                count++;
                t.setText(count +"");

            } 

            lastX = event.values[DATA_X]; 
            lastY = event.values[DATA_Y]; 
            lastZ = event.values[DATA_Z]; 
        }

    } 
}   

}

댓글 남기기