Programming/Android

장치의 방향에 관계없이 가속도 값을 알아내는법.

동적할당 2011. 10. 30. 22:24

	

float rotate[] = new float[9];
float acc[] = new float[3];

SensorEventListener rotateVectorEventListener = new SensorEventListener() {

		@Override
		public void onSensorChanged(SensorEvent event) {
			// TODO Auto-generated method stub
			switch (event.sensor.getType()) {
			case Sensor.TYPE_ACCELEROMETER: {
				SensorManager.getRotationMatrixFromVector(rotate, event.values);
			}
				break;
			case Sensor.TYPE_ROTATION_VECTOR: {
				for (int i = 0; i < 3; i++) {
					acc[i] = event.values[0] * rotate[i * 3] + event.values[1] * rotate[i * 3 + 1]
					        + event.values[2] * rotate[i * 3 + 2];
				}
			}
				break;
			}

		}

		@Override
		public void onAccuracyChanged(Sensor sensor, int accuracy) {
			// TODO Auto-generated method stub

		}
	};

이런식으로 사용하게 되면 항상 장치의 방향에 관계없이 실제의 x y z 축의 가속도를 나타내 준다.
하지만 자이로 센서가 없는 장치, 혹은 센서의 감도가 좋지 않다면  가만히 놔둬도 측정값이 발광을 하는데다
적분을 하면 말도 안되는 값으로 폭주..
갤럭시S2 는 자이로 센서가 있어서 시도해볼만 할것 같다.
하지만 난 없잔아?
안될거야..