Android加速度传感器


加速度传感器原理:加速度传感器数值可通过onSensorChanged(SensorEvent event)中event.values获得。返回的是float数组单位m/s^2。

加速度传感器的X轴沿着手机屏幕向右(手机左边在下,数值为正)。上面数组的第一个为传感器X轴的加速度值。

加速度传感器的Y轴沿着手机屏幕向上(手机下边在下,数值为正)。。上面数组的第二个为传感器Y轴的加速度值。

加速度传感器的Z轴垂直于手机屏幕向上(手机屏幕朝上,数值为正)。。上面数组的第三个为传感器Z轴的加速度值。

编程操作:1、通过(SensorManager)getSystemService(Context.SENSOR_SERVICE);返回传感器管理器sensormanager。

2、通过sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)返回加速度传感器对象。

3、在onResume()中注册加速度传感器监听器 sensormanager.registerListener(this,

sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME) 。

其中SensorManager.SENSOR_DELAY_GAME为传感器数据的频率SENSOR_DELAY_FASTEST、SENSOR_DELAY_GAME、SENSOR_DELAY_NORMAL、SENSOR_DELAY_UI依次频率减小,但资源消耗的更少。

4、在onStop()中取消注册sensormanager.unregisterListener(this)

5、通过onSensorChanged(SensorEvent event) 中event.values获得各个方向上加速度的值并做处理。

6、onAccuracyChanged(Sensor sensor, int accuracy)为传感器的精度发生改变时触发的事件。accuracy为 sensor改变后的精度。

参考代码:

  1. public class SenorActivity extends Activity implements SensorEventListener {  
  2.     SensorManager sensormanager;  
  3.     EditText editText;  
  4.       
  5.     @Override  
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.activity_senor);  
  9.         editText=(EditText)findViewById(R.id.edit);  
  10.         sensormanager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);  
  11.           
  12.     }  
  13.   
  14.     /* (non-Javadoc) 
  15.      * @see Android.app.Activity#onResume() 
  16.      */  
  17.     @Override  
  18.     protected void onResume() {  
  19.         // TODO Auto-generated method stub   
  20.         super.onResume();  
  21.         sensormanager.registerListener(this, sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);  
  22.     }  
  23.   
  24.     /* (non-Javadoc) 
  25.      * @see android.app.Activity#onStop() 
  26.      */  
  27.     @Override  
  28.     protected void onStop() {  
  29.         // TODO Auto-generated method stub   
  30.         super.onStop();  
  31.         sensormanager.unregisterListener(this);  
  32.     }  
  33.   
  34.     @Override  
  35.     public boolean onCreateOptionsMenu(Menu menu) {  
  36.         getMenuInflater().inflate(R.menu.activity_senor, menu);  
  37.         return true;  
  38.     }  
  39.   
  40.     @Override  
  41.     public void onAccuracyChanged(Sensor sensor, int accuracy) {  
  42.         // TODO Auto-generated method stub   
  43.           
  44.           
  45.     }  
  46.   
  47.     @Override  
  48.     public void onSensorChanged(SensorEvent event) {  
  49.         // TODO Auto-generated method stub   
  50.         float[] values=event.values;  
  51.         StringBuilder sb=new StringBuilder();  
  52.         sb.append("X方向上的加速度");  
  53.         sb.append(values[0]+"\n");  
  54.         sb.append("Y方向上的加速度");  
  55.         sb.append(values[1]+"\n");  
  56.         sb.append("z方向上的加速度");  
  57.         sb.append(values[2]+"\n");  
  58.         editText.setText(sb.toString());  
  59.     }  
  60.   
  61.       
  62. }  

相关内容