Development/Android
LocationManager 설정시 주의 사항
독행소년
2013. 6. 13. 14:56
안드로이드 단말이 현재 위치를 확인하는 방법은 GPS를 통한 방법과 기지국을 통한 방법이 있다.
LocationManager를 이용하여 LocationProvider를 세팅하는 방식으로 위치를 확인 방식을 설정할 수 있다.
GPS를 이용하는 방식은 정확도가 높지만, 실내에서는 사용이 불가능하다는 단점이 있고, 기지국을 이용하는 방식은 실내 사용이 가능하지만 정확도가 떨어진다.
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // LocationManager 객체 생성 locationManager = (LocationManager) this .getSystemService(Context.LOCATION_SERVICE); // LocationManaer.NETWORK_PROVIDER : 기지국들로부터 현재 위치 확인 // LocationManaer.GPS_PROVIDER : GPS들로부터 현재 위치 확인 if (locationManager.isProviderEnabled(locationManager.NETWORK_PROVIDER) == true) { locationProvider = LocationManager.NETWORK_PROVIDER; } else locationProvider = LocationManager.GPS_PROVIDER; // 현재 위치를 조회한다. 결과는 locationListener를 통해 수신 locationManager.requestLocationUpdates(locationProvider, 10000, 0, locationListener); // 최근 위치를 조회한다. 결과는 바로 얻을 수 있음 Location lastKnowLocation = locationManager .getLastKnownLocation(locationProvider); showLocationByToast(lastKnowLocation); // 위치 조회를 철회한다. 리스너를 제거한다. // locationManager.removeUpdates(locationListener); }
또한가지 주의사항으로, 개통되지 않은 단말기를 이용하여 개발을 할 때에는 NETWORK_PROVIDER를 이용해서는 안된다. 개통되지 않은 단말기에서 NETWORK_PROVIDER로 설정하고 LocationManager가 제공하는 메소드들을 호출하면 에러가 발생한다.
여담으로.. 갤럭시노트2에서는 잘 동작하는 앱이 개발폰(갤럭시넥서스)에서는 에러가 나는 이유가 무엇인지를 몰라 한참을 고생했다. 동일 APK 파일인데 장치마다 동작여부가 다르니 황당할 수 밖에..
원인이 개발폰이 미개통 폰인데 기지국으로부터 현재 위치를 확인하려고 해서였다. ㅡ,ㅡ