加速度傳感器原理:加速度傳感器數值可通過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改變後的精度。
參考代碼:
- public class SenorActivity extends Activity implements SensorEventListener {
- SensorManager sensormanager;
- EditText editText;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_senor);
- editText=(EditText)findViewById(R.id.edit);
- sensormanager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
-
- }
-
- /* (non-Javadoc)
- * @see Android.app.Activity#onResume()
- */
- @Override
- protected void onResume() {
- // TODO Auto-generated method stub
- super.onResume();
- sensormanager.registerListener(this, sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
- }
-
- /* (non-Javadoc)
- * @see android.app.Activity#onStop()
- */
- @Override
- protected void onStop() {
- // TODO Auto-generated method stub
- super.onStop();
- sensormanager.unregisterListener(this);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.activity_senor, menu);
- return true;
- }
-
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- // TODO Auto-generated method stub
-
-
- }
-
- @Override
- public void onSensorChanged(SensorEvent event) {
- // TODO Auto-generated method stub
- float[] values=event.values;
- StringBuilder sb=new StringBuilder();
- sb.append("X方向上的加速度");
- sb.append(values[0]+"\n");
- sb.append("Y方向上的加速度");
- sb.append(values[1]+"\n");
- sb.append("z方向上的加速度");
- sb.append(values[2]+"\n");
- editText.setText(sb.toString());
- }
-
-
- }