Being an Android newbie experimenting with GPS stuff I managed to put together this code and it works just like I expect it to except for one thing, the GPS icon never goes away. How can get the GPS icon to disappear when the activity is destroyed? I have
locationManager.removeUpdates(GPSMapTest.this);
locationManager = null;
in my onPause()
but apparently that's not enough? Thanks.
The problem exists in the emulator and also on my HTC EVO with 2.2. On my EVO, the icon stays there when the activity is destroyed and only disappears when I uninstall the app.
public class GPSMapTest extends MapActivity implements LocationListener, OnClickListener {
/** Called when the activity is first created. */
private MapView mapView;
private MapController mapController;
private LocationManager locationManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.TRANSPARENT);
setContentView(R.layout.main);
mapView = (MapView)findViewById(R.id.mapview);
mapController = mapView.getController();
mapController.setZoom(18);
mapView.setClickable(true);
mapView.setEnabled(true);
mapView.setSatellite(true);
Button buttonCurrentLoc = (Button)findViewById(R.id.myloc_btn);
buttonCurrentLoc.setOnClickListener(this);
}//End onCreate()
@Override
protected boolean isRouteDisplayed() {
return false;
}
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(GPSMapTest.this);
locationManager = null;
}
@Override
protected void onResume() {
super.onResume();
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setSpeedRequired(false);
criteria.setCostAllowed(false);
final String bestProvider = locationManager.getBestProvider(criteria, true);
Toast.makeText(GPSMapTest.this, "Best Provider: " + bestProvider, Toast.LENGTH_SHORT).show();
locationManager.requestLocationUpdates(bestProvider, 60000, 1, GPSMapTest.this);
Location location = locationManager.getLastKnownLocation(bestProvider);
if (location != null) {
Double latitude = location.getLatitude()*1E6;
Double longitude = location.getLongitude()*1E6;
GeoPoint point = new GeoPoint(latitude.intValue(),longitude.intValue());
final MyLocationOverlay myLocationOverlay = new MyLocationOverlay(GPSMapTest.this, mapView);
mapView.getOverlays().add(myLocationOverlay);
myLocationOverlay.enableMyLocation();
mapController.animateTo(point);
}
mapView.setBuiltInZoomControls(true);
}
public void onClick(View v) {
switch (v.getId()) {
case (R.id.myloc_btn):
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setSpeedRequired(false);
criteria.setCostAllowed(false);
final String bestProvider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(bestProvider);
if (location != null) {
Double latitude = location.getLatitude()*1E6;
Double longitude = location.getLongitude()*1E6;
GeoPoint point = new GeoPoint(latitude.intValue(),longitude.intValue());
final MyLocationOverlay myLocationOverlay = new MyLocationOverlay(GPSMapTest.this, mapView);
mapView.getOverlays().add(myLocationOverlay);
myLocationOverlay.enableMyLocation();
mapController.animateTo(point);
}
mapView.setBuiltInZoomControls(true);
break;
}
}
public void onLocationChanged(Location location) {
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (location != null) {
final MyLocationOverlay myLocationOverlay = new MyLocationOverlay(GPSMapTest.this, mapView);
mapView.getOverlays().add(myLocationOverlay);
myLocationOverlay.enableMyLocation();
myLocationOverlay.runOnFirstFix(new Runnable() {
public void run() {
mapController.animateTo(myLocationOverlay.getMyLocation());
}
});
}
mapView.setBuiltInZoomControls(true);
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
No one? I tried everything with my limited knowledge! Help!