Android传感器的运用之ACCELEROMETER

Android中支持很多种传感器:
比如加速度,重力的,光感,磁感等等。
在运用该API常用到的两个类和一个接口
SensorManager:传感器管理类;
Sensor:一个描述传感器的类;
SensorEventListener:传感器事件监听类(SensorListener类已过期);
一般运用步骤:

1.通过上下文获取SensorManager的对象。

Context.getSystemService(Context.Sensor_service);

2.实例化一个你需要使用的sensor对象。

Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

也可以通过getSensorList()来获取所有的传感器对象,返回一个list;
3.实现传感器监听接口
4.注册传感器
5.反注册传感器
代码例子都很简单简短。
以下附上我以前用到的一个关于加速度的传感器,我用来做摇晃事件监听;

/**
 * 摇动检测器
 * @author Nono
 *
 */
public class ShakeDetector implements SensorEventListener{
	private static final String TAG = ShakeDetector.class.getSimpleName();
	
	 private static final double SHAKE_SHRESHOLD = 7000d;
	  private Context mContext;
	  private long lastTime ;
	  private float last_x;
	  private float last_y;
	  private float last_z;
	
	  private SensorManager sensorManager;
	  private onShakeListener shakeListener;
	  /**
	   * 构造
	   * @param context
	   */
	  public ShakeDetector(Context context){
		  mContext = context;
		  sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
	  }
	  
	/**
	 * 注册传感器
	 */
	public boolean registerListener() {
		
		if (sensorManager != null) {
			Sensor sensor = sensorManager
					.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
			if (sensor != null) {
				this.sensorManager.registerListener(this, sensor,
						SensorManager.SENSOR_DELAY_GAME);
				LogUtil.log(TAG, "registerListener: succeed!!");
				return true;
			}
		}
		return false;
	}
	  
	/**
	 * 反注册传感器
	 */
	public void unRegisterListener() {
		if (sensorManager != null)
			sensorManager.unregisterListener(this);
	}
	
	public void setOnShakeListener(onShakeListener listener){
		shakeListener = listener;
	}

	public void onSensorChanged(SensorEvent event) {
		//if (event.sensor.getType() == SensorManager.SENSOR_ACCELEROMETER) {
			long curTime = java.lang.System.currentTimeMillis();
			if ((curTime - lastTime) > 10) {
				long diffTime = (curTime - lastTime);
				lastTime = curTime;
				float x = event.values[0];
				float	y = event.values[1];
				float z = event.values[2];
				float speed = Math.abs(x + y + z - last_x - last_y - last_z)
						/ diffTime * 10000;
				if (speed > SHAKE_SHRESHOLD) {
					// 检测到摇晃后执行的代码
					shakeListener.onShake();
				}
				last_x = x;
				last_y = y;
				last_z = z;
			}
		//}
	}

	public void onAccuracyChanged(Sensor sensor, int accuracy) {
		// TODO Auto-generated method stub
		
	}
	
	/**
	 * 
	 * @author Nono
	 *
	 */
	public interface onShakeListener{
		public void onShake();
	}

}

上面是自己实现的一个关于加速度的传感器类
在Activity中实例化该类,并实现onShakeListener接口

@Override
	protected void onCreate(Bundle savedInstanceState) {
		requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
		super.onCreate(savedInstanceState);
		mContext = this;
		mShakeDetector = new ShakeDetector(mContext);
		mShakeDetector.setOnShakeListener(this);

然后你可以在Activity的几个生命周期中实现它的注册和反注册。
在onshakeListener中onShake方法中做传感器检测到变动的事件处理。

你可能感兴趣的:(android,service,null,float,interface,delay)