추가 파일
MapManager.java : 위치 찾기
DialogManager.java : 다이얼로그 관리
MainActivity에 MapManager 인스턴스 생성.
MapManager.java
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapController;
public class MapManager {
private DialogManager mDialogManager;
private MapController mMapController;
private LocationManager mLocationManager;
private String mProvider; // 공급자
public MapManager(Context context) {
mDialogManager = new DialogManager(context);
mMapController = MyGps.mMapController;
mLocationManager = (LocationManager)context.getSystemService(context.LOCATION_SERVICE);
// mProvider = mLocationManager.GPS_PROVIDER; // GPS
mProvider = mLocationManager.NETWORK_PROVIDER; // NETWORK
}
/* 위치 찾기 */
public void SearchLocation() {
mLocationManager.requestLocationUpdates(mProvider, 1000, 0, mListener);
mDialogManager.Loading();
}
LocationListener mListener = new LocationListener() {
public void onLocationChanged(Location location) {
GeoPoint point = new GeoPoint((int)(location.getLatitude()*1E6), (int)(location.getLongitude()*1E6));
mMapController.animateTo(point); // 위치로 이동
mLocationManager.removeUpdates(mListener); // 해제
mDialogManager.LoadingEnd();
}
public void onProviderDisabled(String provider) {
// 추가 : 공급자 사용불가 처리
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}; // mListener
}
-
mProvider : 공급자 선택 ( GPS를 사용하면 더욱 정확한 위치 확인가능. )
-
mLocationManager.requestLocationUpdates(mProvider, 1000, 0, mListener); (공급자, 1초, 0m, mListener);
시간과 거리는 AND가 아닌 OR. ex) 100초, 1000m 일경우, 1000m를 움직이지 않아도 100초 후에는 자동으로 갱신이 된다.
- MainActivity에서 만든 메뉴 1번에 SearchLocation();을 연결한다. 메뉴 선택 후 '위치찾기'시 위치를 찾는중이라는 다이얼로그를 띄워준다.
위치를 찾으면 다이얼로그와 위치찾기를 해제시킨다. ( 배터리 소모 방지 )
DialogManager.java
import android.app.ProgressDialog;
import android.content.Context;
public class DialogManager {
private Context context;
private ProgressDialog mProgressDialog;
public DialogManager(Context context) {
this.context = context;
}
/* loading 구현*/
public void Loading() {
mProgressDialog = ProgressDialog.show(context, null, "위치 정보 받는중...", true, false);
}
/* loading 끝 */
public void LoadingEnd() {
mProgressDialog.dismiss();
}
}
위치를 찾을때는 보여주고, 찾고 난 후 제거해 준다.