티스토리 뷰

Mobile/Android

[Android]Sensor

out of coding 2015. 2. 24. 15:17

오늘은 센서에 대해서 정리를 좀 해볼까 합니다.

안드로이드폰에서는 여러가지 센서를 사용할수 있는데... 이것을 사용할 일이 좀 생기다보니 공부할겸.


1. 센서 매니저 생성하기


일반적인 방법으로 SystemService를 얻어와야 합니다.


SensorManager manager = (SensorManager)getSystemService(SENSOR_SERVICE);


2. 센서들 사용하기


SensorManager에는 getDefaultSensor라는 메소드가 존재하는데요.

이 메소드를 이용하여서 우리가 사용하려는 Sensor를 가져와야 합니다.


Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);


위에서 적어놓은 녀석은 자기장 센서... 다시 말해서 나침이 만들때 사용합니다.


종류는 다음과 같으며, 물론 전화기에 센서가 있어야지 가져올수 있고, 안되면 못가져옵니다.


- TYPE_ACCELEROMETER : 가속 센서

- TYPE_ALL : 모든 센서

- TYPE_GRAVITY : 중력 센서

- TYPE_GYROSCOPE : 회전 센서

- TYPE_LIGHT : 조도 센서

- TYPE_LINEAR_ACCELERATION : 선형 가속도 센서

- TYPE_MAGNETIC_FILED : 자기장 센서

- TYPE_ORIENTATION : 방향센서

- TYPE_PRESSURE : 압력 감지 센서

- TYPE_PROXIMITY : 근접 센서

- TYPE_ROTATION_VECTOR : 회전 센서

- TYPE_TEMPERATURE : 온도 센서


이외의 추가적으로 많은 타입들이 존재합니다. 대략적으로 이럼...


3. Listener 만들기


뭐 물론 느낌이 오겠지만 센서를 등록하여 주게 되면, 센서의 변화에 따른 값이 전달되는 Listener가 존재합니다.


SensorEventListener를 자신이 사용하고 싶은 방법으로 구성을 하여 줍니다.

저는 예제소스에 포함되어 있는대로 Activity에 implement시켜서 사용하므로 다음과 같은 형식이 되겠죠.


manager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);


여기에서 세번째에 들어가는 파라메터가 무엇일지 궁금할것입니다.

들어갈수 있는 값들은 이미 정의가 되어 있으며, 다음과 같습니다.


- SENSOR_DELAY_FASTEST : 가장 빠른 속도

- SENSOR_DELAY_GAME : 게임에 적합한 속도

- SENSOR_DELAY_NORMAL : 화면 방향 전환에 적당한 속도

- SENSOR_DELAY_UI : 사용자 조작을 위해 알맞은 속도


자 그런데 이부분에서 저 Listener를 등록하게 되면, 구상화를 하여주어야 하는 메소드가 두개가 나오게 됩니다.


onAccuracyChanged(Sensor sensor, int accuracy)


이것이 무엇이냐면, 단말의 센서의 정확도가 변경이 되었을 경우에 호출이 되게 되는데 센서의 경우에는 정확도가 거의 변화가 없다고 하니 신경은 쓰지 않아도 됩니다.

그렇지만 accuracy에 오는 값들에 대해서는 알아야 겠죠.


- SENSOR_STATUS_ACCURACY_HIGH : 정확도 높음

- SENSOR_STATUS_ACCURACY_MEDIUM : 정확도 보통

- SENSOR_STATUS_ACCURACY_LOW : 정확도 낮음

- SENSOR_STATUS_UNRELIABLE : 신뢰할 수 없음


onSensorChanged(SensorEvent event)


센서의 값이 변경될 경우에 이쪽 메소드로 넘어오게 되는데, 이 객체 자체가 내부 시스템에서 재사용될 수 있기 때문에 사용하려고 하면, 점유를 하면 안된다고 합니다.

복사해서 사용해야겠죠


대략적인 객체내부 값들


accuracy : 센서의 정확도(위에 있죠?)

sensor : 센서 객체

timestamp : 센서의 데이터 측정 시간

values : 센서의 측정값이 들어있는 배열


4. Listener 해제


그냥 마구잡이로 띄워놓고 사용을 해도 되지만 백그라운드에서 이렇게 자원을 사용하다보면 배터리가 아주 좋아합니다.

그래서 사용하지 않는 녀석들은 해제를 하여 주어야 하는데요.

방법은 아주 간단하게 제공하여 줍니다.


manager.unregisterListener(this);


5. 소스코드


마무리로 소스코드 업데이트 합니다.

예제는 나침반방향을 잡아오는 소스입니다.


SensorTest.zip




댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함