티스토리 뷰

Mobile/Android

안드로이드 센서 이용하기

out of coding 2018. 1. 8. 21:45

안드로이드 센서를 이용하는 방법에 대해서 알아봅시다.

물론... 저는 iOS개발자이지만. 안드로이드도 놓을수 없기에 ㅎㅎ

조만간 서버 개발자로 넘어가고 싶네요... 한가지 언어에 만족을 못하는 스타일이라.


일단 센서를 이용하여서 개발을 하는 방법을 보여드립니다.


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
public class TestActivity extends Activity implements SensorEventListener {
    private SensorManager mSensorManager;
    private Sensor mGyroscope;
    private Sensor accSensor;
 
    private int accelXValue;
    private int accelYValue;
    private int accelZValue;
 
    private int gyroX;
    private int gyroY;
    private int gyroZ;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.main_activity);
         
        //센서 매니저 얻기
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        //자이로스코프 센서(회전)
        mGyroscope = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
        //엑셀로미터 센서(가속)
        accSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    }
 
    // 정확도에 대한 메소드 호출 (사용안함)
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
 
    }
 
    // 센서값들 얻어오기
    public void onSensorChanged(SensorEvent event) {
        Sensor sensor = event.sensor;
 
        if (sensor.getType() == Sensor.TYPE_GYROSCOPE) {
            gyroX = Math.round(event.values[0* 1000);
            gyroY = Math.round(event.values[1* 1000);
            gyroZ = Math.round(event.values[2* 1000);
            System.out.println("gyroX =" + gyroX);
            System.out.println("gyroY =" + gyroY);
            System.out.println("gyroZ =" + gyroZ);
             
        }
        if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            accelXValue = (int) event.values[0];
            accelYValue = (int) event.values[1];
            accelZValue = (int) event.values[2];
            System.out.println("accelXValue=" + accelXValue);
            System.out.println("accelYValue=" + accelYValue);
            System.out.println("accelZValue=" + accelZValue);
        }
    }
 
    //리스너 등록
    protected void onResume() {
        super.onResume();
 
        // 주기 설명
        // SENSOR_DELAY_UI 갱신에 필요한 정도 주기
        // SENSOR_DELAY_NORMAL 화면 방향 전환 등의 일상적인  주기
        // SENSOR_DELAY_GAME 게임에 적합한 주기
        // SENSOR_DELAY_FASTEST 최대한의 빠른 주기
 
        mSensorManager.registerListener(this, mGyroscope, SensorManager.SENSOR_DELAY_FASTEST);
        mSensorManager.registerListener(this, accSensor, SensorManager.SENSOR_DELAY_FASTEST);
    }
     
    //리스너 해제
    protected void onPause() {
        super.onPause();
 
        mSensorManager.unregisterListener(this);
    }
}
 
cs


대략 SensorManager Service에서 값을 가져와서 Sensor의 값으로 센서를 사용할 수 있도록 하여줍니다.


Sensor.TYPE_GYROSCOPE


대략 이런 값을 가지고 사용을 하게 되죠...


그 이후에 센서의 정확도(주기)를 설정하여 주고, LIstener를 통하여 값을 가져오게 됩니다.


SensorManager.SENSOR_DELAY_FASTEST


대략 이럼... ㅎㅎㅎ


지금 약간 졸린 상태라 계속 대략이라는 표현을 사용하는데요.

그냥 이정도만 설명해도 다들 알것 같아서 입니다.


그럼 수고하세요.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함