歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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. }  
Copyright © Linux教程網 All Rights Reserved