携帯電話を振るイベントステップと機能パッケージ


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();

	}

}