반응형

1. 각각의 센서를 저장한다.

sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
sensorAccel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorMag = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

2. 센서 등록은 onResume에서 센서 해제는 onPause에서 한다.

protected void onResume() {
super.onResume();
sensorManager.registerListener(this, sensorAccel, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(this, sensorMag, SensorManager.SENSOR_DELAY_NORMAL);
}

protected void onPause() {

super.onPause();

sensorManager.unregisterListener(this);

}

3. 가속도 센서와 자기장 센서의 값을 모두 저장한다.

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
accel[0] = event.values[0];
accel[1] = event.values[1];
accel[2] = event.values[2];
}
else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
mag[0] = event.values[0];
mag[1] = event.values[1];
mag[2] = event.values[2];
}

4. 저장한 센서들의 값을 가지고 SensorManager.getOrientation() 메서드를 호출하여 기울기를 구한다.

SensorManager.getRotationMatrix(r, null, gravity, geomagnetic);
SensorManager.getOrientation(r, values);

final int azimut= (int) ( Math.toDegrees(values[0] ) + 360 ) % 360;
final int pitch = (int)Math.toDegrees(values[1]);
float rr = -values[2] * 180 / (float)Math.PI;

if (Math.abs(rr) > 90) {
    if (rr > 0)
        rr = 90 - (rr - 90);
    else
        rr = -90 + Math.abs(rr + 90);
}
final float roll = rr;

if (pitch <= -20) {
if (roll > 10) {
sb.append("left");
if (roll > 60)
sb.append(" fast");
else if (roll > 30)
sb.append(" normal");
else
sb.append(" slow");
}
else if (roll < -10) {
sb.append("right");
if (roll < -60)
sb.append(" fast");
else if (roll < -30)
sb.append(" normal");
else
sb.append(" slow");
}
}
else if (pitch >= 20) {
if (roll > 10) {
sb.append("left");
if (roll > 60)
sb.append(" fast");
else if (roll > 30)
sb.append(" normal");
else
sb.append(" slow");
}
else if (roll < -10) {
sb.append("right");
if (roll < -60)
sb.append(" fast");
else if (roll < -30)
sb.append(" normal");
else
sb.append(" slow");
}
}

기울기 텍스트에 대한 수치는 임시로 넣은 값이다.


참조: https://developer.android.com/reference/android/hardware/SensorManager.html













+ Recent posts