Android摇一摇

来源:互联网 发布:linux下安装oracle 编辑:程序博客网 时间:2024/05/22 11:46

整体思路:对加速感应进行注册监听,满足条件时,开始震动。要注意在不使用时取消监听


private SensorManager sensorMgr ;private Sensor sensor;private static final String TAG = "ShakeTestActivity";     @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);      //初始化      sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);                //取得加速器类型的传感器         sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//传感器的种类很多,可以使用getSensorList方法获得所有可用的感应器,该方法返回的是一个List<Sensor> }


注册监听器

@Override    protected void onResume() {    // TODO Auto-generated method stub    super.onResume();    if(sensorMgr!=null)    {    //注册监听器       sensorMgr.registerListener(sensorListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);       /*    第三个参数是检测的灵敏度            SENSOR_DELAY_FASTEST 最灵敏,快的让你无语            SENSOR_DELAY_GAME 游戏的时候用这个,不过一般用这个就够了,和上一个很难看出区别            SENSOR_DELAY_NORMAL 比较慢。            SENSOR_DELAY_UI 最慢的,几乎就是横和纵的区别            */    }    }
取消监听

  @Override    protected void onStop() {    // TODO Auto-generated method stub    super.onStop();    if(sensorMgr!=null)    {//    注意,说明文档中提到,即使activity不可见的时候,感应器依然会继续的工作,//    所以一定要在onPause方法中关闭触发器,否则将耗费用户大量电量.    //取消监听    sensorMgr.unregisterListener(sensorListener);    }    }



定义一个SensorEventListener类型的监听

  private SensorEventListener sensorListener = new SensorEventListener() {                //数值发生变化时调用@Overridepublic void onSensorChanged(SensorEvent event) {// TODO Auto-generated method stub//感应器很敏感,细小的改变都将被检测到。所以本函数将不停的被调用,即使activity不可见的时候,感应器依然会继续的工作,,所以要注意注销监听//(测试时发现,将手机置于水平桌面稳定后 XY均为0 Z的值为9.8 约等于重力加速度float [] values = event.values;                         //values[0]或者values[SensorManager.DATA_X]                         float x = values[0];//X表示左右移动的加速度float y = values[1];    //Y表示前后移动的加速度float z = values[2];    //Z表示垂直方向的加速度Log.i(TAG, "x轴方向的重力加速度" + x +  ";y轴方向的重力加速度" + y +  ";z轴方向的重力加速度" + z);             int medumValue = 19
            if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) { //满足条件时,就可进行其他操作如震动//                vibrator.vibrate(200);                         }}@Override//精确度发生变化时调用public void onAccuracyChanged(Sensor sensor, int accuracy) {// TODO Auto-generated method stub}};



	
				
		
原创粉丝点击