한 걸음 두 걸음

android 안드로이드 ] 실내 실외 구분하기 본문

FrontEnd/Android

android 안드로이드 ] 실내 실외 구분하기

언제나 변함없이 2019. 6. 11. 21:44
반응형

안드로이드에 내장된 센서를 통해 실내와 실외를 구분하는 방법은 

1. 조도센서(빛의밝기)

2. GPS

3. WiFi

등이 있습니다.

1번 조도의 경우 실내가 실외보다 어둡다는 점을 이용한 것이지만 실외에 있을 때 핸드폰을 주머니나 가방에 넣고다니는 경우를 잡아내지 못하므로 정확성이 떨어집니다.

2번 GPS의 경우 실내에 있을 때 위도와 경도 값이 업데이트되지 않는 점을 이용하여 실내에있는지 실외에 있는지 구별할 수 있습니다. (onLoctionChanged함수에서 지속적으로 위도경도 값 업데이트가 가능합니다.)하지만 가끔 실내에 있을 때도 GPS값이 잡힐 때가 있어 추천하지 않습니다. 그리고 타임 스레드를 돌려가며 이전값과 일치하는지 일치하지않는지 확인하는 작업의 부하가 많이 걸릴 수 있습니다. GPS를 잡는 것 자체가 Power측면에서 핸드폰에 큰 무리가 갈 수 있습니다.

가장 추천드리는 방법은 3번 WiFi를 사용하는 것입니다.  이번에 텀프로젝트를 진행하면서 이와같이 다양한 방법들을 다 적용시켜봤는데 (ㅜㅜ) 가장 효율적인 방법은 WiFi를 사용하는 것이었습니다.

WiFi를 이용하여 실내와 실외를 구분할 수 있는 방법은

List<ScanResult> scanList = wifiManager.getScanResults();로 받아온 

1. scanList.size()를 활용하는 것과

2. scanList내의 level(Rssi dBm)값을 활용하는 방법 두 가지가 있습니다.

 

1번의 경우, 실외가 실내보다 잡히는 WiFi갯수가 많을 것이라 가정하고 사용한 방법인데, 정말로 한산한 실외인 경우에는 확연히 WiFi AP갯수가 줄어드는 것을 확인했지만, WiFi AP가 있을법한 건물 주변에 있을 땐 오히려 실내보다 더 많은 WiFi AP가 잡히는 것을 확인했습니다. 때문에 실외와 실내 사이의 구분이 명확하지 않았으나, 용도에 따라서는 이 또한 실내 실외를 구분할 때 쓰일 수 있을 것으로 보입니다.

 

2번의 경우, 바로 텀프로젝트에 적용시킨 방법인데 실내에서 잡히는 WiFi level(신호세기, 보통 실내에 설치하므로)이 실외에서 잡히는 level보다 클 것이라는 가정 아래에 측정해보았습니다. 그 결과 실내 신호는 -55dBm~-45dBm사이였고, 실외의 경우 -90dBm~-60dBm사이였습니다. 때문에 60dBm을 기준으로 두고 신호 세기를 따라 실내와 실외를 구분하기로 했습니다.

 

이 포스팅은 실외와 실내를 구분하기위한 방법을 연구해본 경험을 써본 것 뿐입니다.

WiFi의 topRssi값을 이용하여 실외와 실내를 구분하는 소스코드는 다음 포스팅으로 작성해보도록 하겠습니다.

반응형