소스 전문 모두 올립니다.

단순히 맵뷰 보여주고 현재 위치갱신 기능밖에 없습니다.

lomohome.com/316 블로그에 올려져있는 소스를 따라했습니다..

=====================================================================================

package ufc.org;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

public class UFC_Project extends MapActivity {
 
 private MapView mapView; //맵뷰 객체
 
 private List<Overlay> listOfOverlays; //맵에 표시된 오버레이(레이어)들을 가지고 있는 리스트
 
 private String bestProvider; //현재 위치값을 가져오기위한 프로바이더. (network, gps)

 private LocationManager locM; //위치 매니저
 private LocationListener locL; //위치 리스너
 private Location currentLocation; //현재 위치
 private MapController mapController; //맵을 줌시키거나, 이동시키는데 사용될 컨트롤러

 private LocationItemizedOverlay overlayHere; //현재위치 마커가 표시되어질 오버레이
 
 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        overlayHere = null;
       
        mapView = (MapView) findViewById(R.id.mapview); //맵뷰 객체를 가져온다.
     mapView.setBuiltInZoomControls(true); //줌인,줌아웃 컨트롤을 표시한다.

     mapController = mapView.getController(); //맵컨트롤러를 가져온다.
     mapController.setZoom(17); //초기 확대는 17정도로..

     //위치 매니저를 시스템으로부터 받아온다.
     locM = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
     
     //사용가능한 적절한 프로바이더를 받아온다.
     //network (보통 3G망,Wifi AP 위치정보)또는 gps 둘중 하나로 설정된다.
     bestProvider = locM.getBestProvider(new Criteria(), true);

     //기기에 가지고 있는 마지막 위치정보로 현재위치를 초기 설정한다.
     currentLocation = locM.getLastKnownLocation(bestProvider);
     
     //위치 리스너 초기화
     locL = new MyLocationListener();
     //위치 매니저에 위치 리스너를 셋팅한다.
     //위치 리스너에서 10000ms (10초) 마다 10미터 이상 이동이 발견되면 업데이트를 하려한다.
     locM.requestLocationUpdates(bestProvider, 10000, 10, locL);

     //처음에 한번 맵뷰에 그려준다.
     updateOverlay(currentLocation);
       
       
    }

   
   
   
   
   
 @Override
 protected boolean isRouteDisplayed() {
  // TODO Auto-generated method stub
  return false;
 }
 
 
 
 
 
 
 
 /////////////////////내 위치 리스너///////////////////////////
 public class MyLocationListener implements LocationListener {

  

  @Override
  public void onLocationChanged(Location location) {
   //위치 이동이 발견되었을때 호출될 메소드.
   //위의 설정에서 10초마다 100미터 이상 이동이 발견되면 호출된다.
   updateOverlay(location);
  }

  @Override
  public void onProviderDisabled(String provider) {
   //Log.d("test", "GPS disabled : " + provider);
  }

  @Override
  public void onProviderEnabled(String provider) {
   //Log.d("test", "GPS Enabled : " + provider);
  }

  @Override
  public void onStatusChanged(String provider, int status, Bundle extras) {
   //Log.d("test", "onStatusChanged : " + provider + " & status = "+ status);
  }

 }
 
 
 protected void updateOverlay(Location location) {
  
  //기존에 화면에 찍어둔 오버레이 (마커들)을 싹 지운다.
  listOfOverlays = mapView.getOverlays(); //맵뷰에서 오버레이 리스트를 가져온다.
  if (listOfOverlays.size() > 0) {
   listOfOverlays.clear(); //오버레이가 있을때 싹 지워준다.
   //Log.d("test", "clear overlays : " + listOfOverlays.size());
  } else {
   //Log.d("test", "empty overlays");
  }

  //Location 객체를 가지고 GeoPoint 객체를 얻어내는 메소드
  GeoPoint geoPoint = getGeoPoint(location);
  //현재위치를 표시할 이미지
  Drawable marker;

  //실제 운영소스엔 분기하여 현재위치와 선택위치 이미지를 변경하게 되어있다.
  marker = getResources().getDrawable(R.drawable.icon_here);   
  marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());

  //LocationItemizedOverlay 를 이용하여 현재위치 마커를 찍을 오버레이를 생성한다.
  overlayHere = new LocationItemizedOverlay(marker);
  //touch event 의 null pointer 버그를 방지하기 위해 마커를 찍고 바로 populate 시켜준다.
  overlayHere.mPopulate();
  
  //현재위치를 GeoCoder 를 이용하여 대략주소와 위,경도를 Toast 를 통하여 보여준다.
  String geoString = showNowHere(location.getLatitude(), location.getLongitude() , true);

  //현재위치 마커 정의
  OverlayItem overlayItem = new OverlayItem(geoPoint, "here", geoString);
  overlayHere.addOverlay(overlayItem); //현재위치 오버레이 리스트에 현재위치 마커를 넣는다.

  /* 지점정보를 HTTP통신을 통해 서버에서 받아와서 전역변수인 brList (지점리스트)에 넣는다.
  // 성능을 고려하여 쓰레드로 구현이 되어있다.
  // 고다음 지점리스트 오버레이에 넣고 화면에 찍어주는 메소드.
  showBranchMarker(location.getLatitude(), location.getLongitude(),
    this.searchType, SEARCH_RANGE);
  

  // 맵뷰에서 터치이벤트를 받을 오버레이를 추가한다.
  // 특정지점을 오래 눌렀을때 특정 지점 기준으로 재검색을 하기 위하여 터치이벤트를 받아와야한다.
  //mapView.getOverlays().add(new MapTouchDetectorOverlay());

  */ //마지막으로 생성된 오버레이레이어를 맵뷰에 추가한다.
  mapView.getOverlays().add(overlayHere);
  mapView.getController().animateTo(geoPoint); //현재위치로 화면을 이동한다.
  mapView.postInvalidate(); //맵뷰를 다시 그려준다.
   
 }
 
 
 private GeoPoint getGeoPoint(Location location) {
  if (location == null) {
   return null;
  }
  Double lat = location.getLatitude() * 1E6;
  Double lng = location.getLongitude() * 1E6;
  return new GeoPoint(lat.intValue(), lng.intValue());
 }
 
 protected class LocationItemizedOverlay extends ItemizedOverlay<OverlayItem> {
  private List<OverlayItem> overlays;
  
  public LocationItemizedOverlay(Drawable defaultMarker) { //오버레이 생성자
   //마커 이미지의 가운데 아랫부분이 마커에서 표시하는 포인트가 되게 한다.
   super(boundCenterBottom(defaultMarker));
   overlays = new ArrayList<OverlayItem>();
  }
  
  @Override
  protected OverlayItem createItem(int i) {
   return overlays.get(i);
  }
  
  @Override
  public int size() {
   return overlays.size();
  }
  
  public void addOverlay(OverlayItem overlay) {
   overlays.add(overlay);
   //null pointer 버그때문에 오버레이 아이템 추가후 가능한 빨리 populate 해줘야한다.
   populate();
  }
  
  @Override
  protected boolean onTap(int index) {
  
   //마커를 눌렀을때 발생시킬 이벤트 메소드이다.
  
   if ("here".equals(overlays.get(index).getTitle())) {
    //현재 위치일 경우 간단한 토스트 메세지를 보여준다.
    Toast.makeText(getApplicationContext(),
      overlays.get(index).getSnippet(), Toast.LENGTH_SHORT)
      .show();
   } else {

   /**/

   }
  
   return true;
  }
  
  //외부에서 마커의 populate 를 해주기 위한 메소드.
  public void mPopulate() {
   populate();
  }
 }
  
 private String showNowHere(double lat, double lng , boolean showOption){
  StringBuilder geoString = new StringBuilder();
  try {
   Geocoder goecoder = new Geocoder(getApplicationContext(),
     Locale.getDefault());

   Address adr = goecoder.getFromLocation(lat,
     lng, 1).get(0);

   if (adr.getLocality() != null) geoString.append(adr.getLocality()).append(" ");
   if (adr.getThoroughfare() != null) geoString.append(adr.getThoroughfare());
   if (!"".equals(geoString.toString())) geoString.append("\n\n");
   
  } catch (Exception e) { }
  
  geoString.append("위도 : ").append(lat).append(" ,경도 : ").append(lng);
  
  if (showOption){
   Toast.makeText(getApplicationContext(), geoString.toString(),
     Toast.LENGTH_SHORT).show();
  }
  
  return geoString.toString();
 }
 
 
 
 
 
 
 
 
 
 
 
 
 
}


=============================================================================

고수님들 돠주십시오;; 맵뷰의 세계는 참으로 오묘하군요....