안드로이드 > 위도/경로 - 위치 정보를 구하는 방법 이번 포스트에서는 안드로이드 앱이 위치 정보를 어떻게 구할 수 있는지 알아봅니다 1. 먼저 위치 정보를 구하기 위한 권한을 설정합니다.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> |
2. LocationListener 인터페이스를 구현하는 클래스를 정의하세요. 이 클래스는 위치 정보를 위치 공급자로부터 지속적으로 받아오는 역할을 합니다. 오버라이드 해야 하는 메소드들은 다음과 같습니다. void onLocationChanged(Location location) . 위치 정보를 가져올 수 있는 메소드입니다. . 위치 이동이나 시간 경과 등으로 인해 호출됩니다. . 최신 위치는 location 파라메터가 가지고 있습니다. . 최신 위치를 가져오려면, location 파라메터를 이용하시면 됩니다. void onProviderDisabled(String provider) . 위치 공급자가 사용 불가능해질(disabled) 때 호출 됩니다. . 단순히 위치 정보를 구한다면, 코드를 작성하실 필요는 없습니다. void onProviderEnabled(String provider) . 위치 공급자가 사용 가능해질(enabled) 때 호출 됩니다. . 단순히 위치 정보를 구한다면, 코드를 작성하실 필요는 없습니다. void onStatusChanged(String provider, int status, Bundle extras) . 위치 공급자의 상태가 바뀔 때 호출 됩니다. . 단순히 위치 정보를 구한다면, 코드를 작성하실 필요는 없습니다.
LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { } public void onProviderDisabled(String provider) { } public void onProvider Enabled(String provider) { } public void onStatusChanged(String provider, int status, Bundle extras) { } }; |
3. onLocationChanged 메소드에서 위치 정보를 읽어 오세요. location 파라메터로부터 읽으시면 됩니다.
Location 객체로부터 위도(latitude)와 경도(longitude)를 비롯한 위치 정보를 구할 수 있습니다.
double latitude = location.getLatitude(); double lonngitude = location.getLongitude(); |
사용예)
private Location lastKnownLocation = null ; private LocationListener locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); // Get the last location. lastKnownLocation = location; } @Override public void onProviderDisabled(String provider) {} @Override public void onProviderEnabled(String provider) {} @Override public void onStatusChanged(String provider, int status, Bundle extras) {} };4. 컨텍스트로부터 위치 관리자를 구하세요. 액티비티 클래스 내에서 위치 관리자를 구한다고 가정합니다. 그러면 액티비티의 상위 클래스인 Context 클래스의 getSystemService 메소드를 호출하면 되는 것이죠.
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); |
5. 위치 관리자에게 위치의 갱신을 요청하세요. 필요한 메소드는 LocationManager의 requestLocationUpdates입니다. 파라메터는 다음과 같습니다. String provider . 위치 공급자를 대입하세요. . 참고로 지정 가능한 값들은 다음과 같습니다. LocationManager.GPS_PROVIDER LocationManager.NETWORK_PROVIDER LocationManager.PASSIVE_PROVIDER long minTime . 위치 갱신하는데 필요한 최소 시간 간격입니다. 단위는 millisecond입니다. float minDistance . 위치를 갱신하는데 필요한 최소 거리입니다. 단위는 미터입니다. LocationListener listener . 위치 갱신을 처리할 리스너입니다. 2에서 구현한 리스너 객체의 이름을 대입해 주시면 되겠습니다. 위치 공급자가 GPS이고, 갱신에 필요한 최소 시간 간격이 1초(1000 milliseconds)이며, 최소 거리가 10미터인 위치 갱신을 요구한다고 가정해 봅시다. 코드는 다음과 같습니다. 리스너는 2에서 구현한 것을 listener 파라메터에 대입하였습니다.
리스너는 2에서 구현한 것을 listener 파라메터에 대입하였습니다.lm.requestLocationUpdates( LocationManager.GPS_PROVIDER, 1000, 10, locationListener );6. 위치 갱신이 더 이상 필요하지 않으면, LocationManager의 removeUpdates 메소드를 호출하세요. 파라메터는 다음과 같습니다. LocationListener listener . 위치 갱신을 처리하던 리스너입니다. 이것을 대입해야 위치 갱신이 중단됩니다. 위치 정보를 가져온 후 바로 갱신 중단을 원한다면, 다음과 같이 코드를 작성하시면 됩니다.LocationListener locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { LocationManager lm = (LocationManager)getSystemService(Context. LOCATION_SERVICE); // Get the last location. lastKnownLocation = location; // Stop the update as soon as get the location. lm.removeUpdates(locationListener); } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) {} @Override public void onStatusChanged(String provider, int status, Bundle extras) { } };아래 예제는 버튼을 눌러 GPS 로 부터 위도/경도 값을 뽑아 Toast 로 보여주는 예제 입니다.
아래 예제는 버튼을 눌러 GPS 로 부터 위도/경도 값을 뽑아 Toast 로 보여주는 예제 입니다.import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class GpsLocation extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gpslocation); Button button01 = (Button) findViewById(R.id.button01); button01.setOnClickListener(new OnClickListener() { public void onClick(View v) { // startLocationService startLocationService(); } }); } private void startLocationService() { // get manager instance LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // set listener GPSListener gpsListener = new GPSListener(); long minTime = 10000; float minDistance = 0; manager.requestLocationUpdates( LocationManager.GPS_PROVIDER, minTime, minDistance, gpsListener); Toast.makeText(getApplicationContext(), "Location Service started.\nyou can test using DDMS.", 2000).show(); } private class GPSListener implements LocationListener { public void onLocationChanged(Location location) { //capture location data sent by current provider Double latitude = location.getLatitude(); Double longitude = location.getLongitude(); String msg = "Latitude : "+ latitude + "\nLongitude:"+ longitude; Log.i("GPSLocationService", msg); Toast.makeText(getApplicationContext(), msg, 2000).show(); } public void onProviderDisabled(String provider) { } public void onProviderEnabled(String provider) { } public void onStatusChanged(String provider, int status, Bundle extras) { } }
[출처] http://ankyu.entersoft.kr/Lecture/android/gps_01.asp
'IT > 안드로이드+JAVA' 카테고리의 다른 글
[안드로이드] gps 주소 Address 클래스 정보 (정리) (0) | 2016.04.19 |
---|---|
[안드로이드] 액티비티 생명주기 (펌) (0) | 2016.04.19 |
[안드로이드] EditText 문자열, 정수값, 더블값 가져오기 (정리) (0) | 2016.04.19 |
[안드로이드] keytool, debug.keystore 위치 (정리) (0) | 2016.04.18 |
[안드로이드] 체크박스값 전달하기 (펌) (0) | 2016.04.15 |