Today
-
Total
-
  • [안드로이드] 내 핸드폰이 지원하는 센서 알아보기
    Coding/Android 2019. 5. 8. 12:39

    안드로이드는 기본적으로 내장센서로 다양한 기능을 제공합니다.

    센서에는 다양한 종류가 있습니다

    운동 센서, 위치 센서, 환경 센서 등등으로 분류하여

    자이로센서, 조도 센서, 온도 센서 등등 여러 센서를 지원하며 그 전체 종류는 다음 표와 같습니다

    그렇다면 안드로이드는 모든 기종에서 모든 센서를 지원할까요?

    그렇지 않습니다. 안드로이드 스튜디오로 빌드를 할때

    이런 창이 뜨는데, 위의 Connected Device가 내 핸드폰의 기종이며 옆에 CPU와 API Level이 나와있습니다.

    이 레벨에 맞는 센서만을 지원합니다. 그렇다면 내 핸드폰이 어떤 센서를 지원하는지 어떻게 알수있을까요?

    이를 코드를 통해 직접 알아보았습니다.

     

    package com.example.sensortext;
    
    import android.hardware.Sensor;
    import android.hardware.SensorManager;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
        private SensorManager mSensorManager;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            StringBuffer sb = new StringBuffer("");
            mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    
            if (mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null) {
                sb.append("Sensor.TYPE_ACCELEROMETER\n");
            } else { }
    
            if (mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE) != null) {
                sb.append("Sensor.TYPE_AMBIENT_TEMPERATURE\n");
            } else { }
    
            if (mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY) != null) {
                sb.append("Sensor.TYPE_GRAVITY\n");
            } else { }
    
            if (mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) != null) {
                sb.append("Sensor.TYPE_GYROSCOPE\n");
            } else {
            }
            if (mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT) != null) {
                sb.append("Sensor.TYPE_LIGHT\n");
            } else { }
    
            if (mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION) != null) {
                sb.append("Sensor.TYPE_LINEAR_ACCELERATION\n");
            } else { }
    
            if (mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) != null) {
                sb.append("Sensor.TYPE_MAGNETIC_FIELD\n");
            } else { }
    
            if (mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION) != null) {
                sb.append("Sensor.TYPE_ORIENTATION\n");
            } else { }
    
            if (mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE) != null) {
                sb.append("Sensor.TYPE_PRESSURE\n");
            } else { }
    
            if (mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY) != null) {
                sb.append("Sensor.TYPE_PROXIMITY\n");
            } else { }
    
            if (mSensorManager.getDefaultSensor(Sensor.TYPE_RELATIVE_HUMIDITY) != null) {
                sb.append("Sensor.TYPE_RELATIVE_HUMIDITY\n");
            } else { }
    
            if (mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR) != null) {
                sb.append("Sensor.TYPE_ROTATION_VECTOR\n");
            } else { }
    
            if (mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE) != null) {
                sb.append("Sensor.TYPE_TEMPERATURE\n");
            } else { }
    
    
            TextView tv = (TextView)findViewById(R.id.textView);
    
            tv.setText(sb.toString());
    
        }
    
    }
    

     

     

    원래 안드로이드에서 센서를 호출하여 사용하려면

    SensorManager와 Sensor, SensorListener를 연결하여 정보를 불러와야하지만

    지금같은경우는 센서를 지원하는지만 알아보면 되기때문에 Listener를 생략하고

    SensorManager만 선언한 뒤 임이의 DefaultSensor를 만들어 센서가 비어있는지 존재하는지만 확인해보았습니다.

     

    모든 센서를 sSensorManager에 불러온 뒤 sb라는 StringBuffer에 지원하는 경우에만 그 센서의 이름을 추가하여

    출력하는 코드입니다. 레이아웃에는 textView하나만 존재하면 가능합니다.

     

     

    갤럭시 8 기준으로 다음과 같은 센서를 지원한다고 출력되는군요

    이는 핸드폰 기종마다 다를수있으며 sdk 설치여부에따라 다를수있습니다

     

    댓글