안녕하세요.
갤럭시S 로 앱을 개발 하고 있습니다.
작년에 개발 완료한 앱에 카디오 트레이너 같은 기능을 추가 하려고
GPS 신호를 받아서 구글 맵에 표시 하는 기능을 구현 하고 있습니다.
제가 기능 구현을 잘 못한 건지 GPS 수신 상태가 않좋습니다.
구현한 내용을 정리해봅니다.
1. Provider 설정
String provider = locationManager.getBestProvider(criteria, true); 네트워크 또는 GPS 중 신호가 센놈 한테 받는다.
String provider = LocationManager.GPS_PROVIDER; GPS 만 사용한다.
위 2 방식 다 테스트 중입니다.
2. GPS 상태 확인
GpsStatus.NmeaListener 로 Nmea 정보 중 GPGGA 값의 6번째 Position Fix 값으로 신뢰도 확인하고
GPGGA 7번째 Satellites Used 값으로 현재 수신 된 위성의 개수를 확인하여 세기를 확인하고
3. 구글맵에 위치 정보 표시
locationManager.requestLocationUpdates(provider, 1000, 1, locationListener); 이와 같이
LocationListener()로 1초 마다 확인 해서 1m 이동 하면 구글 맵 위에 표시하게 구현 하였습니다.
갤럭시S 기본 앱인 TMAP 이나 네비게이션 또는 카디오트레이너는 실행하자 마자 1초 이내로
잘 잡힙니다.
질문 정리
1. 갤럭시S 에서 GPS 관련 해서 확인 해야 할 것이 또 있나요?
2. 환경설정-> 장소 및 보안->무선 네트워크 사용 체크를 하면 네트워크로 위치 파악된 정보가
GPS NMEA 값으로 변환 해서 알려 주나요?
(실내에서는 NMEA 등 location 값이 정확히 들어옵니다. ㅜ.ㅜ)
3. 안드로이드 개발자 사이트에 보면 LocationListener() 로 들어오는 Bundle extras 값으로
위성 개수를 알 수 있다는데 값이 안들어오는 것 같아요!
4. wifi는 정확한 위치 값을 모를 것 같고 3G는 수신하는 핸드폰의 위도, 경도 값을 정확히 알 수
건가요?
글이 상당히 긴데 어린이날 홀로이 테스트 하는 저를 봐서 댓글 부탁 드리겠습니다.
감사합니다. ^.^
실외에서 테스트 하는데 날씨가 상당히 좋네요 ㅋㅋㅋ 외롭네요
안녕하세요.
댓글 감사합니다.
예전에 GPS 모듈에서 값을 수신한 정보를 이용하여 단말기에 표시하는 기기를 개발 했었습니다.
GPS개발자는 아니여서 GPS 통신에 대해서는 잘 모르지만 GPS에 대해서는 조금 알고 있는 상황에서 어제 테스트 해보았는데
결과에 대해서 혼란 스럽네요!
날씨 좋은 날 실외에서 GPS 수신이 안되서 질문 올린 것입니다.
GPS 수신 안될 때에 바로 기본 앱인 TMAP이나 내비게이션 카디오 트레이너 같은 경우는 1초 이내에 GPS 가 아주 잘 잡힙니다.
그리고 NMEA값을 확인 하는 이유는 사용자에게 GPS 신뢰도 또는 수신하는 위성 개수를 GUI로 표시해줘야 하기 때문에 사용하는 건데
Location class에서도 위의 값을 알 수 있다구요? 다시 확인 해보겠습니다.
오늘 다시 점검 해보아야 겠습니다.
감사합니다.
앗
Location class에서는 확인할수 없구요 안드로이드 2.1버전에서는 NMEA 리스너가 동작하지 않아서 버전별로 맞추려고
getAccuracy() 값을
if( l_accuracy >= 200 ) { by_cnt = 3; }
else if( l_accuracy >= 100 ){ by_cnt = 4; }
else if( l_accuracy >= 80 ) { by_cnt = 5; }
위처럼 정확도 거리별로 나름의 레벨을 나눠서 표현해줬거든요 ㅎㅎ
gps 카운트가 높게 나올수록 정확도가 높다고는 하지만 표현에따른 설명하기 차이라서 위에처럼 맞췄습니다. ^^;
1. 갤럭시S 에서 GPS 관련 해서 확인 해야 할 것이 또 있나요?
환경설정 → 장소 및 보안 → 내 위치 → GPS 위성사용, GPS 도우미사용 다체크
갤S에서 폰설정은 저것 말고는 없습니다.
2. 환경설정-> 장소 및 보안->무선 네트워크 사용 체크를 하면 네트워크로 위치 파악된 정보가
GPS NMEA 값으로 변환 해서 알려 주나요?
(실내에서는 NMEA 등 location 값이 정확히 들어옵니다. ㅜ.ㅜ)
NMEA 프로토콜은 GPS 사용할때 들어옵니다.
String provider = locationManager.getBestProvider(criteria, true); 네트워크 또는 GPS 중 신호가 센놈 한테 받는다.
- 아시겠지만 위처럼 하면 둘중 어떤게 들어온다 확실히 장담할수 없고
네트워크위치가 들어왔을경우 wi-fi를 켜논상태에서 네트워크위치와 wi-fi를 끈상태 즉 3g모드에서 수신되는 위치오차가
심할겁니다. 정확안 위치를 이용하시려면 GPS를 추천합니다.
String provider = LocationManager.GPS_PROVIDER; GPS 만 사용한다.
GPS를 사용할경우 실내, 터널, 지하 등에서는 신호가 제대로 수신되지 않습니다.
GPS 위성 신호자체가 인체나 콘크리트 건물을 뚫지 못하기 떄문입니다.
가끔 실내에서 된다고 오해 하시는 분들이 계시는데~
창가 근처라던가 가정집 같은경우 천장이 콘크리트가 아닌경우는 오차가 발생하긴하나 GPS가 잡할수는 있습니다.
3. 안드로이드 개발자 사이트에 보면 LocationListener() 로 들어오는 Bundle extras 값으로
위성 개수를 알 수 있다는데 값이 안들어오는 것 같아요!
GPS 경우는 bundle 값이 null 만 수신이 되고 네트워크 이용시에는 가끔 들어오긴 하는데
버그가 있는걸로 알고있습니다.
2.2 기준 아직 사용할수 없다고 보는게 맞습니다.
4. wifi는 정확한 위치 값을 모를 것 같고 3G는 수신하는 핸드폰의 위도, 경도 값을 정확히 알 수
건가요?
위치 정확도 순서는
GPS, 네트워크(wi-fi활성화, 3G만 사용) 순입니다.
일반적인경우 Location class에서 주는 정보로 다 해결이 되실텐데 NEMA를 사용하신 이유가 있으신지??
저같은 경우는 NMEA에서 gps 위성 갯수를 뽑기위해 썻다가 2.1 버전에서는 nmea 리스너가 동작하지 않아서
location 에서 넘겨주는 정확도를 이용하고 있습니다.
----------------------------------
저랑 비슷하시네요~ 힘내세요!! 쉬는날이 쉬는날이 아닌 ㅎㅎ