한 걸음 두 걸음
android 안드로이드 ] 실내 실외 구분하기 본문
안드로이드에 내장된 센서를 통해 실내와 실외를 구분하는 방법은
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값을 이용하여 실외와 실내를 구분하는 소스코드는 다음 포스팅으로 작성해보도록 하겠습니다.
'FrontEnd > Android' 카테고리의 다른 글
Service에서 Activity로 데이터 전달 (0) | 2019.06.12 |
---|---|
android 안드로이드 ] 스마트폰 이동 중인지 정지 상태인지 구분하기/ 가속도센서 활용 (0) | 2019.06.11 |
android / 안드로이드 ] LocationListener 내부 오버라이드 함수 (1) | 2019.06.11 |
android 안드로이드 ] 가속도 센서를 통해 움직임 감지하기 (0) | 2019.06.11 |
android 안드로이드 ] SQLite(임베디드) 내부 저장소 활용하기 (0) | 2019.06.08 |