SensorEventListener 接口 摇一摇

public class  test extends Activity implements OnClickListener, SensorEventListener {
private SensorManager mSensorManager;
              @Override
	protected void onCreate(Bundle savedInstanceState) {
		//..............
	}
      }
       @Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
		// TODO Auto-generated method stub

	}


	private float[] temp;

	@Override
	public void onSensorChanged(SensorEvent event) {
		if(PublicUtil.isWallPaperLocked(this))return; //屏幕如果锁定
		if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
                 //加速传感器类型(常量之为-1),一起有8种类型,-1表示是all
				if (temp!=null&&isShake(event.values)) {
					if (!isShaking) {
						isShaking = true;
						Timer timer = new Timer();
						TimerTask task = new TimerTask() {

							@Override
							public void run() {
								// TODO Auto-generated method stub
								getData(); //数据处理,如intent,发送http请求
							}
						};
						timer.schedule(task, 1000);//延迟一秒执行
					}
				}
				temp = event.values.clone();//克隆传感器里的values的值
			}
	}

	boolean isShake(float[] values){
		boolean flag = false;
		for (int i = 0; i < values.length; i++) {
			if(temp[i]-values[i]>15){ //如果摇动的力度大于15 就执行摇一摇
				System.out.println("temp="+temp[i]+"value="+values[i]);
				flag = true;
				break;
			}
		}
		return flag;
	}
     @Override
	protected void onResume() {
		super.onResume();
		StatService.onResume(this);
		// 加速度传感器
		mSensorManager.registerListener(this,
				mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
				// 还有SENSOR_DELAY_UI、SENSOR_DELAY_FASTEST、SENSOR_DELAY_GAME等,
				// 根据不同应用,需要的反应速率不同,具体根据实际情况设定
				SensorManager.SENSOR_DELAY_NORMAL);
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		StatService.onPause(this);
		mSensorManager.unregisterListener(this);
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		// this.unRegisterLocationListener();
		mSensorManager.unregisterListener(this);
	}

从这个示例,我们可以基本总结出使用Android传感器的步骤,注册一个SensorEventListener,然后在onSensorChanged方法中处理传感器的数据。

这里需要注意的一点是,我把注册Sensor这个过程放在了onResume()方法中,而取消注册放在了onPause()方法中,这主要是因为,传感器的使用太耗电了,而且一定需要手动取消注册,否则即使Activity不可见,传感器依然在工作中,几个小时内就会耗光电量。

更多传感器的知识参考

http://aliusa.iteye.com/blog/1064560    

猜你喜欢

转载自284772894.iteye.com/blog/1807499