본문 바로가기

Mobile/Android

[Android] 현재 위치 구하기

안드로이드 SDK를 이용한 GPS 위치정보를 구하기
LocationManager를 호출해 GPS와 기지국에서 제공하는 위치 정보를 얻음
얻은 위치 정보를 이용해서 GEocoder를 활용해서 주소를 가져옴

 private LocationManager locManager;
 private Geocoder geoCoder;
 private Location myLocation = null;
 private double latPoint, lngPoint; 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
...
  // LocationListener 핸들
  locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
  // GPS로 부터 위치 정보를 업데이트 요청
  locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
  // 기지국으로부터 위치 정보를 업데이트 요청
  locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, this);
  // 주소를 가져오기 위해 설정 - KOREA, KOREAN 모두 가능
  geoCoder = new Geocoder(this, Locale.KOREA);
}

 @Override
 public void onLocationChanged(Location location) {
  // TODO Auto-generated method stub
  myLocation = location;
 }

 @Override
 public void onLocationChanged(Location location) {
  // TODO Auto-generated method stub
  myLocation = location;
  getGeoLocation();
 }

 public void getGeoLocation() {
  StringBuffer mAddress = new StringBuffer();
  if(myLocation != null) {
   latPoint = myLocation.getLatitude();
   lngPoint = myLocation.getLongitude();
   try {
    // 위도,경도를 이용하여 현재 위치의 주소를 가져온다.
    List<Address> addresses;
    addresses = geoCoder.getFromLocation(latPoint, lngPoint, 1);
    for(Address addr: addresses){
     int index = addr.getMaxAddressLineIndex();
     for(int i=0;i<=index;i++){
      mAddress.append(addr.getAddressLine(i));
      mAddress.append(" ");
     }
     mAddress.append("\n");
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
   MLog.e("Address : " + mAddress);
  }
 }

LocationManager 를 이용하기 위해 Activity에 LocationListnener 를 implements 해야 한다.
권한 설정(AndroidManifest.xml)
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION/">