안드로이드 내장 센서 종류(Sensor 클래스)
Type | 센서 | 값 | 설명 |
---|---|---|---|
int | TYPE_ACCELEROMETER | 1 | 가속도 감지, 외부의 충격량과 방향 감지 센서 |
int | TYPE_ALL | -1 | 모든 센서 |
int | TYPE_AMBIENT_TEMPERATURE | 13 | 주위 온도 감지 센서 |
int | TYPE_GAME_ROTATION_VECTOR | 15 | 보정되지 않은 회전 벡터 센서 |
int | TYPE_GEOMAGNETIC_ROTATION_VECTOR | 20 | 지자기 회전 벡터 |
int | TYPE_GRAVITY | 9 | 축의 방향과 중력 감지 |
int | TYPE_GYROSCOPE | 4 | 회전 정보 감지, 다양한 축의 회전각 감지 |
int | TYPE_LIGHT | 5 | 빛의 세기 감지 센서 |
int | TYPE_MAGNETIC_FIELD | 2 | 자기장 센서 |
int | TYPE_MOTION_DETECT | 30 | 움직임 감지 센서 |
int | TYPE_ORIENTATION | 3 | 방향각 감지 센서 |
int | TYPE_PRESSURE | 6 | 압력 센서 |
int | TYPE_PROXIMITY | 8 | 근접한 물체와의 거리 감지 센서 |
int | TYPE_RELATIVE_HUMIDITY | 12 | 상대 습도 센서 |
int | TYPE_ROTATION_VECTOR | 11 | 회전 벡터 센서 |
int | TYPE_SIGNIFICANT_MOTION | 17 | 중요한 모션 트리거 센서 |
int | TYPE_STEP_COUNTER | 19 | 발걸음 횟수 센서 |
int | TYPE_STEP_DETECTOR | 18 | 발걸음 감지 센서 |
int | TYPE_TEMPERATURE | 7 | 온도 감지. API level 14에서 사용 |
센서 사용 준비
1) SensorManager 인스턴스를 얻습니다.
2) 위 표에 있는 센서 중 하나를 getDefaultSensor() 메소드에 지정하여 Sensor 객체를 얻습니다.
3) onResume() 메소드에서 registerListener() 메소드로 센서의 감지를 등록합니다
4) onPause() 메소드에서 unregisterListener() 메소드로 센서 감지를 해제합니다.
1)SensorManager 인스턴스 얻기
지연된 초기화를 사용하여 sensorManager 변수를 처음 사용할 때 getSystemService() 메소드로 SensorManager 객체를 얻습니다.
2)센서중 하나를 지정하여 onResume에 등록하기
SensorManager 객체가 준비되면 액티비티가 동작할 때만 센서가 동작해야 배터리를 아낄 수 있습니다. 일반적으로 센서의 사용등록은 액티비티의 onResume() 메소드에서 수행합니다.
자동 완성 기능을 사용하여 onResume() 메소드를 오버라이드해 위와같이 센서등록하는 코드를 작성합니다.
1)registerListener() 메소드로 사용할 센서를 등록합니다.
첫 번째 인자는 센서 값을 받을 SensorEventListener 입니다. 여기서는 this를 지정하여 액티비티에서 센서값을 받도록합니다.
2) 두 번째 인자로 sensorManager의 getDefaultSensor() 메소드로 사용할 센서 종류를 지정합니다.(가속도센서를 지정)
3) 세 번째 인자는 센서값을 얼마나 자주 받을지 지정합니다. SensorManager 클래스에 정의된 상수를 사용합니다
- SENSOR_DELAY_FASTEST : 가능한 가장 자주 센서값을 얻습니다
- SENSOR_DELAY_GAME : 게임에 적합한 정도로 센서값을 얻습니다.
- SENSOR_DELAY_NOMAL : 화면 방향이 전환될 때 적합한 정도로 센서값을 얻습니다.
- SENSOR_DELAY_DELAY_UI : 사용자 인터페이스를 표시하기에 적합한 정도로 센서를 얻습니다.
너무 빈번하게 되면 시스템리소스를 낭비하고 전원을 사용하기 때문에. SENSOR_DELAY_NOMAL 을 사용했습니다.
메인엑티비티에는 SensorEventListener를 인터페이스를 구현하도록 추가하고
아래 두 메소드를 오버라이드 합니다.
- onAccuracyChanged() : 센서 정밀도가 변경되면 호출됩니다.
- onSensorChanged() : 센서 값이 변경되면 호출됩니다
3)센서 해제 액티비티가 동작 중일때만 센서를 사용하려면 화면이 꺼지기 직전인 onPause() 메소드에서 센서를 해제합니다.
unregisterListener() 메소드를 이용하여 센서 사용을 해제할 수 있으며 인자로 SensorEventListene 객체를 지정합니다. 여기서는 MainActivity에서 구현하고 있으므로 this를 넣었습니다.
가속도센서
안드로이드 센서 프레임워크에서는 x, y, z 표준 3축 좌표계를 사용하며
x축은 수평, y축은 수직, z 축은 화면의 바깥쪽을 향하게 됩니다
이 좌표는 가속도 센서뿐 아니라
- 중력센서
- 자이로스코프
- 선형 가속도 센서
- 자기장 센서
등에서 사용됩니다.
센서값을 읽어올때는
SensorEvent.values[2] : z축 값
위와같이 읽을 수 있습니다
'Kotlin' 카테고리의 다른 글
Kotlin - 프래그먼트 생성 (0) | 2019.01.05 |
---|---|
Kotlin - 콘텐츠 프로바이더 사용하기 (0) | 2019.01.04 |
Kotlin - 기타기능(let, with, apply, run 함수) (0) | 2019.01.03 |
Kotlin - 기타기능(고차함수, 동반객체) (0) | 2019.01.03 |
Kotlin - 기타기능(확장함수,형변환,형체크) (0) | 2019.01.03 |
댓글