지원하는 센서 (Sensor)의 목록을 얻는 방법
Android 애플 리케이션에서 그 실기가 지원하는 Sensor (센서)의 목록을 얻는 방법은?
Android 애플 리케이션에서 지원하는 Sensor의 취득 방법은 다음과 같이합니다.
우선 SensorManager 인스턴스를 가져옵니다.
SensorManager sm = (SensorManager) getSystemService (SENSOR_SERVICE);
다음 단계이지만, 일단 두 가지 방법이 있는데, 하나는 비추천 (deprecated)되어 있습니다.
Android뿐만 아니라 Java 전반에 말할 수 있지만 기본적으로 사용되지이다 API는 사용하지 않도록합시다.
우선, 굳이 비추천 방법에서 소개합니다.
SensorManager.getSensors ()를 사용합니다.
int sensor = sm.getSensors ();
반환 값은 int 형식입니다.
반환값은 지원하는 각 센서에 대응하는 비트 플래그가 선 상태 값을 반환합니다.
예를 들어, 방향 센서가 있는지 여부는 다음과 같은 판정식으로 판정합니다.
if ((sensor & SensorManager.SENSOR_ORIENTATION)! = 0) {
/ /이 if 문에 들어가면 방향 센서가 지원되고있다
}
위의 방법이되지 않는 이유는 모르겠지만, 다음에 소개하는 방법에 비하면 쓰기가별로 좋지 않을까 싶네요.
다음은 권장 방법입니다. 비추천 버전에 비해 더 객체 지향 같아 졌다는 느낌이 듭니다.
SensorManager.getSensorList ()를 사용합니다.
List <sensor> list = sm.getSensorList (Sensor.TYPE_ALL);
반환값은, Sensor 형식의 List입니다.
인수는 싶어 센서를 지정하지만, 지원하는 모든 Sensor를 원한다면, 위와 같이 Sensor.TYPE_ALL를 지정합니다.
반환 List를 다음과 같이하면 어떤 센서가 지원되고 있는지 확인할 수 있습니다.
for (Sensor s : list) {
/ / 예를 들어, 센서의 이름을 로그 낸다
Log.i (s.getName ());
/ / 예를 들어, 센서의 종류 로그 낸다
Log.i (s.getType ());
}
getType ()의 반환값이 그 Sensor 유형입니다.
예를 들어, 방위 센서를 나타내는 Sensor 경우 TYPE_ORIENTATION가 반환됩니다.
센서를 사용한다면 센서의 리스너를 등록군요.
이어이기 때문에 그 방법도 위의 비추천 패턴과 권장 패턴 소개 둡니다.
우선 비추천 경우입니다.
SensorManager.registerListener ()를 사용합니다.
예를 들어 지원하는 모든 센서를 등록하려면 다음과 같은 느낌입니다.
int sensor = sm.getSensors ();
sm.registerListener (this, sensor);
제 1 인수는 SensorListener를 구현하는 인스턴스를 지정합니다.
제 2 인수는 등록하고 싶은 센서의 비트 OR 연산자의 값입니다.
사실이 SensorListener는 인터페이스 자체도되지 않는 있습니다.
registerListener (),이 방법도되지 않는 있습니다.
다음은 권장되는 방법입니다.
SensorManager.registerListener ()를 사용하지만 위와 인수가 다릅니다.
예를 들어 지원하는 모든 센서를 등록하려면 다음과 같은 느낌입니다.
List <sensor> list = sm.getSensorList (Sensor.TYPE_ALL);
for (Sensor s : list) {
sm.registerListener (this, s);
}
제 1 인수는 SensorListener 대신 SensorEventListener를 구현하는 인스턴스가됩니다.
제 2 인수는 등록 Sensor 형식 인스턴스를 지정합니다.
이벤트 SensorEventListener를 구현하는 인스턴스 onSensorChanged () 통지됩니다.
인수에서 SensorEvent 형식의 인스턴스를 얻을 수 있습니다.
이번은 여기까지로하여 이벤트 처리에 관해서는 또 다른 기회에 · ·.
이번 기사는 내가 이전 센서 목록을 가져오는 방법을 알아낼 때, SensorManager.getSensors ()이 비추천 (deprecated)로되어 있었기 때문에, API 레퍼런스에서 조사한 것입니다.
서적이나 인터넷에 게재되어있는 샘플 코드라고 이번처럼 비추천 (deprecated)으로되어있는 것이 상당히 있습니다.
그 때는, Android의 API 레퍼런스를 보면, 지금은 어떤 API가 추천되고있는가? 는 것을 즉시 알 수 있으므로 참고하시기 바랍니다.
Android SDK와 함께 제공되는 API 참조에서 사용되지 않는 SensorManager.getSensors ()를 보면 다음과 같이 기술되어 있습니다.
이로 인해 "getSensorList (Sensor.TYPE_ALL)를 사용 위하여!"라고 알 수 있습니다.
덧붙여서, API 참조있는 곳이 다음 문서를 참조하십시오.
Android API 참조 위치











