Android摇一摇

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


[java]  view plain copy
  1. <span style="font-size:18px;">private SensorManager sensorMgr ;  
  2. private Sensor sensor;  
  3. private static final String TAG = "ShakeTestActivity";   
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.main);  
  8.       //初始化  
  9.       sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);  
  10.           
  11.         //取得加速器类型的传感器  
  12.          sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);  
  13. //传感器的种类很多,可以使用getSensorList方法获得所有可用的感应器,该方法返回的是一个List<Sensor>  
  14.  }</span>  


注册监听器

[java]  view plain copy
  1. <span style="font-size:18px;">@Override  
  2.     protected void onResume() {  
  3.         // TODO Auto-generated method stub  
  4.         super.onResume();  
  5.         if(sensorMgr!=null)  
  6.         {  
  7.             //注册监听器  
  8.                sensorMgr.registerListener(sensorListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);  
  9.                /* 
  10.                 第三个参数是检测的灵敏度 
  11.                 SENSOR_DELAY_FASTEST 最灵敏,快的让你无语 
  12.                 SENSOR_DELAY_GAME 游戏的时候用这个,不过一般用这个就够了,和上一个很难看出区别 
  13.                 SENSOR_DELAY_NORMAL 比较慢。 
  14.                 SENSOR_DELAY_UI 最慢的,几乎就是横和纵的区别 
  15.                 */  
  16.         }  
  17.     }</span>  
取消监听

[java]  view plain copy
  1. <span style="font-size:18px;">  @Override  
  2.     protected void onStop() {  
  3.         // TODO Auto-generated method stub  
  4.         super.onStop();  
  5.         if(sensorMgr!=null)  
  6.         {  
  7. //          注意,说明文档中提到,即使activity不可见的时候,感应器依然会继续的工作,  
  8. //          所以一定要在onPause方法中关闭触发器,否则将耗费用户大量电量.  
  9.             //取消监听  
  10.             sensorMgr.unregisterListener(sensorListener);  
  11.         }  
  12.     }</span>  



定义一个SensorEventListener类型的监听

[java]  view plain copy
  1. <span style="font-size:18px;">  private SensorEventListener sensorListener = new SensorEventListener() {  
  2.           
  3.                 //数值发生变化时调用  
  4.         @Override  
  5.         public void onSensorChanged(SensorEvent event) {  
  6.             // TODO Auto-generated method stub  
  7.   
  8. //感应器很敏感,细小的改变都将被检测到。所以本函数将不停的被调用,即使activity不可见的时候,感应器依然会继续的工作,,所以要注意注销监听  
  9. //          (测试时发现,将手机置于水平桌面稳定后 XY均为0 Z的值为9.8 约等于重力加速度  
  10.             float [] values = event.values;  
  11.                          //values[0]或者values[SensorManager.DATA_X]  
  12.                          float x = values[0];  //X表示左右移动的加速度  
  13.             float y = values[1];    //Y表示前后移动的加速度  
  14.             float z = values[2];    //Z表示垂直方向的加速度  
  15.   
  16.             Log.i(TAG, "x轴方向的重力加速度" + x +  ";y轴方向的重力加速度" + y +  ";z轴方向的重力加速度" + z);   
  17.             int medumValue = 19</span><pre name="code" class="java"><span style="font-size:18px;">  
  18.             if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) {   
  19. //满足条件时,就可进行其他操作如震动  
  20. //                vibrator.vibrate(200);   
  21.                   
  22.   
  23.             }  
  24.         }  
  25.         @Override  
  26.         //精确度发生变化时调用  
  27.         public void onAccuracyChanged(Sensor sensor, int accuracy) {  
  28.             // TODO Auto-generated method stub  
  29.               
  30.         }  
  31.     };</span></pre>  
  32. <pre></pre>  
  33. <p></p>  
  34. <pre></pre>  
  35. <span style="font-size:18px"><br>  
  36. <br>  
  37. </span>  
  38. <p></p>  
  39. <pre></pre>  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值