携帯電話を振るイベントステップと機能パッケージ
2065 ワード
public class RockService {
private static RockListener rockListener;
private static int MaxScope = 14;
private static SensorManager mSensorManager;
private static long lastRockTime;
private static SensorEventListener listener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
int sensorType = event.sensor.getType();
if (sensorType != Sensor.TYPE_ACCELEROMETER) {
return;
}
float[] values = event.values;
boolean isRock = Math.abs(values[0]) > MaxScope
|| Math.abs(values[1]) > MaxScope
|| Math.abs(values[2]) > MaxScope;
if (isRock && null != rockListener) {
//2
long currentTime = System.currentTimeMillis();
if (currentTime - lastRockTime > 2000) {
rockListener.rock();
lastRockTime = currentTime;
}
}
}
};
/**
* activity onResume
*
* @author carlos [email protected]
* @version :2012-1-15 7:25:47
* @param context
*/
public static void startService(Context context, RockListener rockListener) {
stopService();
RockService.rockListener = rockListener;
mSensorManager = (SensorManager) context
.getSystemService(Context.SENSOR_SERVICE);
mSensorManager.registerListener(listener,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
}
/**
* activity onPause
*
* @author carlos [email protected]
* @version :2012-1-15 7:25:13
*/
public static void stopService() {
if (null != mSensorManager) {
mSensorManager.unregisterListener(listener);
}
rockListener = null;
}
/**
*
*
* @author carlos [email protected]
* @version :2012-1-15 7:41:12
* @param maxScope
*/
public static void setMaxScope(int maxScope) {
MaxScope = maxScope;
}
public interface RockListener {
public void rock();
}
}