블로그

[안드로이드] 간단한 GPS 예제

안드로이드에서 GPS 를 이용해서 좌표를 구하는 간단한 예제입니다.

퍼미션을 얻기 위해서 AndroidManifest.xml 에 아래 퍼미션을 추가합니다.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Log.d("Main", "onCreate");

    logView = (TextView)findViewById(R.id.log);
    logView.setText("GPS 가 잡혀야 좌표가 구해짐");

    // Acquire a reference to the system Location Manager
    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

    // GPS 프로바이더 사용가능여부
    isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    // 네트워크 프로바이더 사용가능여부
    isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

    Log.d("Main", "isGPSEnabled="+ isGPSEnabled);
    Log.d("Main", "isNetworkEnabled="+ isNetworkEnabled);

    LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            double lat = location.getLatitude();
            double lng = location.getLongitude();

            logView.setText("latitude: "+ lat +", longitude: "+ lng);
        }

        public void onStatusChanged(String provider, int status, Bundle extras) {
            logView.setText("onStatusChanged");
        }

        public void onProviderEnabled(String provider) {
            logView.setText("onProviderEnabled");
        }

        public void onProviderDisabled(String provider) {
            logView.setText("onProviderDisabled");
        }
    };

    // Register the listener with the Location Manager to receive location updates
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

    // 수동으로 위치 구하기
    String locationProvider = LocationManager.GPS_PROVIDER;
    Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);
    if (lastKnownLocation != null) {
        double lng = lastKnownLocation.getLatitude();
        double lat = lastKnownLocation.getLatitude();
        Log.d("Main", "longtitude=" + lng + ", latitude=" + lat);
    }
}

위의 메소드를 간략히 설명하면 시스템 서비스에 LocationManager 의 인스턴스를 받아옵니다. 이 LocationManager 인스턴스로 모든 설정을 하게 됩니다.

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

LocationManager 에 로케이션 모니터링을 요청할때 우리 앱이 리스닝할 클래스를 만들어야 합니다. 이게 locationListener 입니다. 여기서 onLocationChanged 메소드가 디바이스 좌표가 바뀔때 호출되는 메소드입니다. 여기서 좌표값을 구해서 사용하면 됩니다.

끝으로 LocationManager 에 로케이션 모니터링을 요청합니다.

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);