android之摇一摇功能_SensorManager的使用

实现“摇一摇”功能,其实很简单,就是检测手机的重力感应,具体实现代码如下:

一、在 AndroidManifest.xml 中添加操作权限

[html] view plain copy print ?
  1. <uses-permission android:name="android.permission.VIBRATE"/>  
二、实现代码

 

[java] view plain copy print ?
  1. import android.app.Activity;   
  2. import android.hardware.Sensor;   
  3. import android.hardware.SensorEvent;   
  4. import android.hardware.SensorEventListener;   
  5. import android.hardware.SensorManager;   
  6. import android.os.Bundle;   
  7. import android.os.Handler;   
  8. import android.os.Message;   
  9. import android.os.Vibrator;   
  10. import android.util.Log;   
  11. import android.widget.Toast;   
  12.    
  13. /** 
  14.  * 安卓晃动手机监听--“摇一摇” 
  15.  *  
  16.  * @author jason0539 
  17.  *  
  18.  */   
  19. public class TestSensorActivity extends Activity {   
  20.    
  21.     private SensorManager sensorManager;   
  22.     private Vibrator vibrator;   
  23.    
  24.     private static final String TAG = "TestSensorActivity";   
  25.     private static final int SENSOR_SHAKE = 10;   
  26.    
  27.     /** Called when the activity is first created. */   
  28.     @Override   
  29.     public void onCreate(Bundle savedInstanceState) {   
  30.         super.onCreate(savedInstanceState);   
  31.         setContentView(R.layout.main);   
  32.         sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);   
  33.         vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);   
  34.     }   
  35.    
  36.     @Override   
  37.     protected void onResume() {   
  38.         super.onResume();   
  39.         if (sensorManager != null) {// 注册监听器   
  40.             sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);   
  41.             // 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率   
  42.         }   
  43.     }   
  44.    
  45.     @Override   
  46.     protected void onStop() {   
  47.         super.onStop();   
  48.         if (sensorManager != null) {// 取消监听器   
  49.             sensorManager.unregisterListener(sensorEventListener);   
  50.         }   
  51.     }   
  52.    
  53.     /** 
  54.      * 重力感应监听 
  55.      */   
  56.     private SensorEventListener sensorEventListener = new SensorEventListener() {   
  57.    
  58.         @Override   
  59.         public void onSensorChanged(SensorEvent event) {   
  60.             // 传感器信息改变时执行该方法   
  61.             float[] values = event.values;   
  62.             float x = values[0]; // x轴方向的重力加速度,向右为正   
  63.             float y = values[1]; // y轴方向的重力加速度,向前为正   
  64.             float z = values[2]; // z轴方向的重力加速度,向上为正   
  65.             Log.i(TAG, "x轴方向的重力加速度" + x +  ";y轴方向的重力加速度" + y +  ";z轴方向的重力加速度" + z);   
  66.             // 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。   
  67.             int medumValue = 19;// 如果不敏感请自行调低该数值,低于10的话就不行了,因为z轴上的加速度本身就已经达到10了                
  68.         if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) {   
  69.                 vibrator.vibrate(200);   
  70.                 Message msg = new Message();   
  71.                 msg.what = SENSOR_SHAKE;   
  72.                 handler.sendMessage(msg);   
  73.             }   
  74.         }   
  75.    
  76.         @Override   
  77.         public void onAccuracyChanged(Sensor sensor, int accuracy) {   
  78.    
  79.         }   
  80.     };   
  81.    
  82.     /** 
  83.      * 动作执行 
  84.      */   
  85.     Handler handler = new Handler() {   
  86.    
  87.         @Override   
  88.         public void handleMessage(Message msg) {   
  89.             super.handleMessage(msg);   
  90.             switch (msg.what) {   
  91.             case SENSOR_SHAKE:   
  92.                 Toast.makeText(TestSensorActivity.this"检测到摇晃,执行操作!", Toast.LENGTH_SHORT).show();   
  93.                 Log.i(TAG, "检测到摇晃,执行操作!");   
  94.                 break;   
  95.             }   
  96.         }   
  97.    
  98.     };   
  99. }   

 

这种实现方式是最简单的,同时也是最敷衍的..等等我整理一个更加严谨的出来,这个跑一下就明显感觉到,摇起来真累.

作者:jason0539

微博:http://weibo.com/2553717707

博客:http://blog.csdn.net/jason0539(转载请说明出处)

你可能感兴趣的:(android之摇一摇功能_SensorManager的使用)