title: android gps position accuracy circle
body: <p>I have a simple activity that gives the GPS position of the user. what i want to do is to draw a circle around the gps position. The circle gives an idea about the accuracy of GPS positioning. For example, if the accuracy is 6 meters, then the radius of the circle will be covering 6 meters . following is the code.</p>
  
  <pre><code>import java.util.List;
  
  import android.app.AlertDialog;
  import android.content.Context;
  import android.content.DialogInterface;
  import android.content.Intent;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  import android.graphics.Canvas;
  import android.graphics.Point;
  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.MapActivity;
  import com.google.android.maps.MapController;
  import com.google.android.maps.MapView;
  import com.google.android.maps.Overlay;
  
  public class ShowMap extends MapActivity {
  
      private MapController mapController;
      private MapView mapView;
      private LocationManager locationManager;
      private GeoUpdateHandler geoUpdateHandler;
  
      @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.gps);
              mapView = (MapView) findViewById(R.id.mapview);
              mapView.setBuiltInZoomControls(true);
              mapView.setSatellite(true);
              mapController = mapView.getController();
              mapController.setZoom(14); // Zoom 1 is world view
              geoUpdateHandler = new GeoUpdateHandler();
  
              locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
              if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                  createGpsDisabledAlert();
              } else {
                  locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
                          0,geoUpdateHandler);
  
              }
  
         }
       private void createGpsDisabledAlert() {
              AlertDialog.Builder builder = new AlertDialog.Builder(this);
              builder
                      .setMessage(
                              "Your GPS is disabled! Would you like to enable it?")
                      .setCancelable(false).setPositiveButton("Enable GPS",
                              new DialogInterface.OnClickListener() {
                                  public void onClick(DialogInterface dialog, int id) {
                                      showGpsOptions();
                                  }
                              });
              builder.setNegativeButton("Do nothing",
                      new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog, int id) {
                              dialog.cancel();
                          }
                      });
              AlertDialog alert = builder.create();
              alert.show();
          }
  
       private void showGpsOptions() {
              Intent gpsOptionsIntent = new Intent(
                      android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
              startActivity(gpsOptionsIntent);
          } 
  
  
       @Override
      protected boolean isRouteDisplayed() {
          // TODO Auto-generated method stub
          return false;
      }
  
  
      public class GeoUpdateHandler implements LocationListener {
  
          @Override
          public void onLocationChanged(Location location) {
              int lat = (int) (location.getLatitude() * 1E6);
              int lng = (int) (location.getLongitude() * 1E6);
              GeoPoint point = new GeoPoint(lat, lng);
              mapController.animateTo(point); //  mapController.setCenter(point);
               MapOverlay mapOverlay = new MapOverlay();
                mapOverlay.setPointToDraw(point);
                List&lt;Overlay&gt; listOfOverlays = mapView.getOverlays();
                listOfOverlays.clear();
                listOfOverlays.add(mapOverlay);
  
          }
  
          @Override
          public void onProviderDisabled(String provider) {
              // TODO Auto-generated method stub
  
          }
  
          @Override
          public void onProviderEnabled(String provider) {
          }
  
          @Override
          public void onStatusChanged(String provider, int status, Bundle extras) {
          }
      }
  
  
      class MapOverlay extends Overlay
      {
        private GeoPoint pointToDraw;
  
        public void setPointToDraw(GeoPoint point) {
          pointToDraw = point;
        }
  
        public GeoPoint getPointToDraw() {
          return pointToDraw;
        }
  
        @Override
        public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
          super.draw(canvas, mapView, shadow);           
  
          // convert point to pixels
          Point screenPts = new Point();
          mapView.getProjection().toPixels(pointToDraw, screenPts);
  
          // add marker
          Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pen);
          canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 128, null);    
          return true;
        }
  
  
  
  
      }
      @Override
      public void onPause() {
          super.onPause();
          locationManager.removeUpdates(geoUpdateHandler);
      }
  
  }
  </code></pre>