title: stop gps on exiting app
body: <p>Ok i have tried Nicholas's solution but still getting force close if i press the back button as the app searches for gps fix.so i m uploading all the codes and files(except icon.png and pen.png in drawables) for the project...so that it's possible just to copy paste the code from here to see whats going on. my main.xml:</p>
  
  <pre><code>    &lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:background="@drawable/icon"
      &gt;
  &lt;TextView  
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/hello"
      /&gt;
  &lt;Button android:text="Start" 
  android:id="@+id/Button01" 
  android:layout_width="120px" 
  android:layout_height="70px"
  android:layout_gravity = "center_horizontal"
  android:textSize="20px"
  android:layout_marginTop="150px"
  android:clickable="true"
  &gt;&lt;/Button&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>next my main activity(GpsLocEx.java)</p>
  
  <pre><code>package com.example.gpslocex;
  
  import android.app.Activity;
  import android.content.Intent;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.Button;
  
  public class GpsLocEx extends Activity {
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          Button start = (Button) findViewById(R.id.Button01);
          start.setOnClickListener(new View.OnClickListener() {
          public void onClick(View view) {
               Intent map = new Intent(view.getContext(), com.example.gpslocex.ShowMap.class);
               startActivityForResult(map, 0);
  
              }
  
          });
  
  
   }
      }
  </code></pre>
  
  <p>next my gps.xml </p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/mainlayout"
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent" &gt;
  
      &lt;com.google.android.maps.MapView
          android:id="@+id/mapview"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:clickable="true"
          android:apiKey="06ZLf-HkdkRMb513KS2ZRljmMQL0bntlyMJ-rOQ"
      /&gt;
  
  &lt;/RelativeLayout&gt;
  </code></pre>
  
  <p>next ShowMap.java</p>
  
  <pre><code>package com.example.gpslocex;
  
  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() {
          locationManager.removeUpdates(geoUpdateHandler);
      }
  
  
  }
  </code></pre>
  
  <p>next strings.xml</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;resources&gt;
      &lt;string name="hello"&gt;Version-1.0&lt;/string&gt;
      &lt;string name="app_name"&gt;GpsLocEx&lt;/string&gt;
  
  &lt;/resources&gt;
  </code></pre>
  
  <p>Finally AndroidManifest.xml</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.gpslocex"
        android:versionCode="1"
        android:versionName="1.0"&gt;
      &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
          &lt;uses-library android:name="com.google.android.maps" /&gt;
          &lt;activity android:name=".GpsLocEx"
                    android:label="@string/app_name"&gt;
              &lt;intent-filter&gt;
                  &lt;action android:name="android.intent.action.MAIN" /&gt;
                  &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
              &lt;/intent-filter&gt;
          &lt;/activity&gt;
  &lt;activity android:name=".ShowMap"&gt;&lt;/activity&gt;
  
  &lt;/application&gt;
  &lt;uses-permission android:name="android.permission.INTERNET" /&gt;
  &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;
  &lt;uses-permission android:name="ACCESS_COARSE_LOCATION" /&gt;
  
  &lt;/manifest&gt; 
  </code></pre>