package cn.qylk.app;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import cn.qylk.utils.SendAction;
import cn.qylk.utils.SendAction.ServiceControl;
public class SensorTest implements Callback {
private class SensorListenerImpl implements SensorEventListener{// 监听类
@Override
public void onAccuracyChanged(android.hardware.Sensor sensor,
int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
int sensortype = event.sensor.getType();
float[] values = event.values;
if (sensortype == Sensor.TYPE_ACCELEROMETER) {
long curTime = System.currentTimeMillis();
// 测100毫秒 速度
if ((curTime - lastUpdate) > 50) {
long diffTime = (curTime - lastUpdate);
x = values[0];
y = values[1];
z = values[2];
float speed = Math
.abs(x + y + z - last_x - last_y - last_z)
/ diffTime * 10000;
if (speed > SHAKE_THRESHOLD) {
// 检测到摇晃后执行的代码
mHandler.removeMessages(0);
mHandler.sendEmptyMessageDelayed(0, 300);
}
last_x = x;
last_y = y;
last_z = z;
lastUpdate = curTime;
}
}
}
}
private static SensorTest sensor = new SensorTest();
private static final int SHAKE_THRESHOLD = 5000; // 越小越灵敏
public static SensorTest getInstance() {
return sensor;
}
private Context context = APP.getInstance();
private long lastUpdate;
private Handler mHandler = new Handler(this);
private SensorManager mSensorManager;
private SensorListenerImpl SensorListenerImpl;
private boolean started;
private float x, y, z, last_x, last_y, last_z;
public SensorTest() {
SensorListenerImpl = new SensorListenerImpl();
}
@Override
public boolean handleMessage(Message msg) {
SendAction.SendControlMsg(ServiceControl.NEXT);// 换下一首歌
return true;
}
public void StartService() {// 启动服务
if (started)
return;
mSensorManager = (SensorManager) context
.getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = mSensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(SensorListenerImpl, sensor,
SensorManager.SENSOR_DELAY_GAME);
started = true;
}
public void StopService() {// 停止服务
if (started) {
mSensorManager.unregisterListener(SensorListenerImpl);
started = false;
}
}
}