0
ShakeListener를 구현하려고합니다.별도의 클래스에있는 ShakeListener 구현
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log;
public class ShakeListener implements SensorEventListener {
private SensorManager sensorManager;
private List<Sensor> sensors;
private Sensor sensor;
private long lastUpdate = -1;
private long currentTime = -1;
private float last_x, last_y, last_z;
private float current_x, current_y, current_z, currenForce;
private static final int FORCE_THRESHOLD = 900;
private final int DATA_X = SensorManager.DATA_X;
private final int DATA_Y = SensorManager.DATA_Y;
private final int DATA_Z = SensorManager.DATA_Z;
public ShakeListener(Activity parent) {
SensorManager sensorService = (SensorManager) parent
.getSystemService(Context.SENSOR_SERVICE);
this.sensorManager = sensorManager;
this.sensors = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
if (sensors.size() > 0) {
sensor = sensors.get(0);
}
}
public void start() {
if (sensor != null) {
sensorManager.registerListener(this, sensor,
SensorManager.SENSOR_DELAY_GAME);
}
}
public void stop() {
sensorManager.unregisterListener(this);
}
public void onAccuracyChanged(Sensor s, int valu) {
}
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER
|| event.values.length < 3)
return;
currentTime = System.currentTimeMillis();
if ((currentTime - lastUpdate) > 100) {
long diffTime = (currentTime - lastUpdate);
lastUpdate = currentTime;
current_x = event.values[DATA_X];
current_y = event.values[DATA_Y];
current_z = event.values[DATA_Z];
currenForce = Math.abs(current_x + current_y + current_z - last_x
- last_y - last_z)
/diffTime * 10000;
if (currenForce > FORCE_THRESHOLD) {
Log.d("ShakeListener", "SHAKE DETECTED");
}
last_x = current_x;
last_y = current_y;
last_z = current_z;
}
}
}
지금, 내 주요 활동에서 그것을 envoke 할 (악수 부울 변경을 기다리는 동안 루프를 구현하는 방법에 대한 생각?) : 그래서 ShakeListener.java라는 클래스를 만들었다.
private ShakeListener myShakeListener;
다음
myShakeListener = new ShakeListener(this);
myShakeListener.start();
하지만 난 회선에 자동 NPE를 얻을 : 그래서 내 주요 활동으로, 내가 사용하는 내가 잘못을
this.sensors = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
을 뭐하는 거지? 어떻게 구현해야합니까? sensorService
에서
감사합니다! 나는 이것을 간과했다 : (.. 그것은 지금 일한다! –