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
'develop > android' 카테고리의 다른 글
웹뷰 A태그에 이미지 다운로드 링크 설정 (0) | 2018.07.12 |
---|---|
Android studio에서 aar파일 수동 추가시 build.gradle 필수 추가사항 (0) | 2017.05.22 |
바탕화면에 항상 떠 있는 뷰의 이동 (0) | 2016.08.13 |
화면 잠금 상태에서 카카오톡처럼 화면 띄우기 (0) | 2016.04.05 |
DB에서 최근 마지막 N개의 레코드 가져오기 (0) | 2016.01.10 |