구글맵의 위치정보는 LocationManager를 이용해 관리한다.
LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE));
위 구문으로 매니저 객체를 할당 받은 뒤,
LocationListener 객체를 만들거나 implements해서 구현한다.
@Override
public void onLocationChanged(Location location) {
Log.d(TAG, "onLocationChanged");
if(location.getProvider().equals(LocationManager.GPS_PROVIDER)){
Log.d(TAG, "privider is GPS" + location.getAccuracy());
}
else{
Log.d(TAG, "privider is Network " + location.getAccuracy());
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
그리고 LocationManager.requestLocationUpdates()로 리스너를 등록하는데, provider를 지정하는 부분에서 gps, network 두 종류의 provider가 있다. gps만 등록했을 경우 건물 내부에서는 리스너가 동작하지 않는다. 둘 다 등록하는 방법이 가장 일반적일 것이다.(사전에 네트워크, gps상태를 체크하고 처리할 수도 있겠다)
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, time(millisecond), distance(meter), LocationListener);
privider와 리스너를 등록하고 시간을 잰다. 시간은 1/1000초, 거리는 미터 단위다. 0,0으로 놓으면 디폴트로 동작한다. 이 리스너를 등록하고 나면 사용자가 죽일 때까지 계속 돌아가므로 배터리 소모의 근원이 된다. 사용하지 않을 때는
mLocationManager.removeUpdates(LocationListener);
로 리스너를 제거하자.
댓글