class MypositionOverlay extends Overlay {
 
 private final int mRadius = 5;
 
 @Override
 public void draw(Canvas canvas, MapView mapView, boolean shadow) {
  Projection projection = mapView.getProjection();
  
  if (shadow == false && location != null) {
   // 현재 위치를 얻어옴
   Double latitude = location.getLatitude()*1E6;
   Double longitude = location.getLongitude()*1E6;
   GeoPoint geoPoint;
    geoPoint = new GeoPoint(latitude.intValue(), longitude.intValue());
    
   // 현재 위치를 화면 픽셀로 변환함
   Point point = new Point();
   projection.toPixels(geoPoint, point);
   
   RectF oval = new RectF(point.x - mRadius, point.y - mRadius,
           point.x + mRadius, point.y + mRadius);
   
   // 페인트를 설정함
   Paint paint = new Paint();
   paint.setARGB(250, 255, 255, 255);
   paint.setAntiAlias(true);
   paint.setFakeBoldText(true);
   
   Paint backPaint = new Paint();
   backPaint.setARGB(175, 50, 50, 50);
   backPaint.setAntiAlias(true);
   
   RectF backRect = new RectF(point.x + 2 + mRadius,
            point.y - 3*mRadius,
            point.x + 65,
            point.y + mRadius);
   
   // 마커를 그림
   canvas.drawOval(oval, paint);
   canvas.drawRoundRect(backRect, 5, 5, backPaint);
   canvas.drawText("현재 위치", point.x + 2*mRadius, point.y, paint);  
  }
  super.draw(canvas, mapView, shadow);
 }
  @Override
 public boolean onTap(GeoPoint point, MapView mapView) {
  return false;
 }
 
 Location location;
 
 public Location getLocation() {
  return location;
 }
 
 public void setLocation(Location location) {
  this.location = location;
 }
}
 


 class Whereami extends MapActivity {
 /** Called when the activity is first created. */ 
        
    MapController mapController;
    MypositionOverlay positionOverlay;
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        // MapView의 레퍼런스를 얻어옴
        MapView myMapView = (MapView) findViewById(R.id.myMapView);
        // MapView의 컨트롤러를 얻어옴
        mapController = myMapView.getController();        
        // 지도 표시 옵션을 구성함
        myMapView.setSatellite(true); // 위성 사진 레이어를 표시
        myMapView.setStreetView(true); // 스트리트뷰 레이어를 표시
        myMapView.displayZoomControls(false);
        //myMapView.setBuiltInZoomControls(true); // 확대/축소 버튼 표시 여부를 지정
        //myMapView.setTraffic(false); // 교통량 레이어를 표시
        // 지도를 확대함
        mapController.setZoom(17);
        
        // MypositionOverlay를 추가함
        positionOverlay = new MypositionOverlay();
        List<Overlay> overlays = myMapView.getOverlays();
        overlays.add(positionOverlay);
        
        LocationManager locationManager;
        String context = Context.LOCATION_SERVICE;
        locationManager = (LocationManager)getSystemService(context);
        
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        
        String provider = locationManager.getBestProvider(criteria, true);
        
        Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        
        updateWithNewLocation(location);        
        
        // 2000 = 밀리초(2초), 10 = 미터
        locationManager.requestLocationUpdates(provider, 2000, 10, locationListener);                    
        
    }
    @Override
    protected boolean isRouteDisplayed() {
     return false;     
    }