SensorEventListener 接口 摇一摇
public class test extends Activity implements OnClickListener, SensorEventListener {private SensorManager mSensorManager; @Overrideprotected void onCreate(Bundle savedInstanceState) {//..............} } @Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// TODO Auto-generated method stub}private float[] temp;@Overridepublic void onSensorChanged(SensorEvent event) {if(PublicUtil.isWallPaperLocked(this))return; //屏幕如果锁定if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {if (temp!=null&&isShake(event.values)) {if (!isShaking) {isShaking = true;Timer timer = new Timer();TimerTask task = new TimerTask() {@Overridepublic void run() {// TODO Auto-generated method stubgetData();}};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;} @Overrideprotected 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);}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();StatService.onPause(this);mSensorManager.unregisterListener(this);}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();// this.unRegisterLocationListener();mSensorManager.unregisterListener(this);}
?
从这个示例,我们可以基本总结出使用Android传感器的步骤,注册一个SensorEventListener,然后在onSensorChanged方法中处理传感器的数据。
这里需要注意的一点是,我把注册Sensor这个过程放在了onResume()方法中,而取消注册放在了onPause()方法中,这主要是因为,传感器的使用太耗电了,而且一定需要手动取消注册,否则即使Activity不可见,传感器依然在工作中,几个小时内就会耗光电量。
更多传感器的知识参考
http://aliusa.iteye.com/blog/1064560? ??