-
[안드로이드] 내 핸드폰이 지원하는 센서 알아보기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 설치여부에따라 다를수있습니다
'Coding > Android' 카테고리의 다른 글
[안드로이드] 자동 Import 설정하기 (0) 2019.06.17 [안드로이드] 자이로 센서 값 자바 서버와 연동하기 (0) 2019.06.04 [아두이노] DHT11 라이브러리 추가하기 (0) 2019.06.03 [안드로이드] 글꼴(폰트) 추가하기 (0) 2019.05.29 [안드로이드] 상단의 타이틀 없애기 (0) 2019.05.15