歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android加速度傳感器

Android加速度傳感器

日期:2017/3/1 10:09:48   编辑:Linux編程

加速度傳感器原理:加速度傳感器數值可通過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. @Override
  5. public void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_senor);
  8. editText=(EditText)findViewById(R.id.edit);
  9. sensormanager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
  10. }
  11. /* (non-Javadoc)
  12. * @see Android.app.Activity#onResume()
  13. */
  14. @Override
  15. protected void onResume() {
  16. // TODO Auto-generated method stub
  17. super.onResume();
  18. sensormanager.registerListener(this, sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
  19. }
  20. /* (non-Javadoc)
  21. * @see android.app.Activity#onStop()
  22. */
  23. @Override
  24. protected void onStop() {
  25. // TODO Auto-generated method stub
  26. super.onStop();
  27. sensormanager.unregisterListener(this);
  28. }
  29. @Override
  30. public boolean onCreateOptionsMenu(Menu menu) {
  31. getMenuInflater().inflate(R.menu.activity_senor, menu);
  32. return true;
  33. }
  34. @Override
  35. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  36. // TODO Auto-generated method stub
  37. }
  38. @Override
  39. public void onSensorChanged(SensorEvent event) {
  40. // TODO Auto-generated method stub
  41. float[] values=event.values;
  42. StringBuilder sb=new StringBuilder();
  43. sb.append("X方向上的加速度");
  44. sb.append(values[0]+"\n");
  45. sb.append("Y方向上的加速度");
  46. sb.append(values[1]+"\n");
  47. sb.append("z方向上的加速度");
  48. sb.append(values[2]+"\n");
  49. editText.setText(sb.toString());
  50. }
  51. }
Copyright © Linux教程網 All Rights Reserved