펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO
1. 클래스에 SensorEventListener 참조설정
2. onResume에서 센서값 받아오는 딜레이 설정
3. 리스너가 읽어들이는 센서값 판별, 활용
public class MainActivity extends Activity implements SensorEventListener {
SensorManager sm;
Sensor gyroSensor;
@Override
protected void onCreate(Bundle saveInstanceState) {
sm = = (SensorManager) getSystemService(SENSOR_SERVICE);
//4가지 센서 설정
gyroSensor = sm.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
accSensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
magSensor = sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
oriSensor = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);
}
//액티비티에 SensorEventListener를 참조하게 되면 Add unimplemented methods를 통해 밑의 항목을 오버라이드한다.
@Override
protected void onResume() {
super.onResume();
//4가지 센서에 대한 딜레이 설정. 이걸 해 줘야 리스너로 값이 떨어짐
sm.registerListener(this, gyroSensor, SensorManager.SENSOR_DELAY_UI);
sm.registerListener(this, accSensor , SensorManager.SENSOR_DELAY_UI);
sm.registerListener(this, magSensor, SensorManager.SENSOR_DELAY_UI);
sm.registerListener(this, oriSensor , SensorManager.SENSOR_DELAY_UI);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//정확도 변경시 사용된다는것 같은데 정확한 용도는 잘 모르겠다. 사용되는건 한번도 못 본듯 하다.
}
@Override
public void onSensorChanged(SensorEvent event) {
//여기서 센서값이 변하는걸 체크한다.
switch (event.sensor.getType()) {
case Sensor.TYPE_GYROSCOPE :
Log.d("tag", "TYPE_GYROSCOPE");
break;
case Sensor.TYPE_ACCELEROMETER :
Log.d("tag", "TYPE_ACCELEROMETER");
break;
//등등으로 쭉 나간다.
}
}
}
센서의 값을 확인하는 방법은 case절 안에서
event.values[0] , event.values[1] , event.values[2] 를 출력하면 x,y,z축의 값이 출력된다.
Log.d("tag", "" + event.values[0]); 이런식으로 ..
이상으로 간단한 센서 사용법을 알아보았다.
문의사항이나 태클걸만한게 있다면 언제든지 댓글 남겨주시길.
'Android > 센서' 카테고리의 다른 글
안드로이드 TYPE_ACCELEROMETER 센서로 가속도 구하기 (3) | 2013.11.28 |
---|---|
TYPE_MAGNETIC_FIELD 센서로 방위각 구하기 (2) | 2013.11.28 |