package it.apogeo.android.sqlite.gps_mapview;
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.MyLocationOverlay;
import com.google.android.maps.Overlay;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class GPSActivity extends MapActivity {
private TextView tvLatitudine;
private TextView tvLongitudine;
private TextView tvVelocita;
private TextView tvQuota;
private TextView tvAccuratezza;
MapController mapController;
private MyLocationOverlay myLocationOverlay;
LocationManager locationManager;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvLatitudine = (TextView)this.findViewById(R.id.tvLatitudine);
tvLongitudine = (TextView)this.findViewById(R.id.tvLongitudine);
tvVelocita = (TextView)this.findViewById(R.id.tvVelocita);
tvQuota = (TextView)this.findViewById(R.id.tvQuota);
tvAccuratezza = (TextView)this.findViewById(R.id.tvAccuratezza);
mapView = (MapView)findViewById(R.id.mapView);
mapController = mapView.getController();
mapView.setClickable(true);
mapView.setBuiltInZoomControls(true);
mapController.setZoom(12);
myLocationOverlay = new MyLocationOverlay(this, mapView);
List<Overlay> overlays = mapView.getOverlays();
overlays.add(myLocationOverlay);
myLocationOverlay.enableMyLocation();
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(!locationManager.isProviderEnabled("gps")){
Toast.makeText(this, "GPS è attualmente disabilitato. E' possibile abilitarlo dal menu impostazioni.", Toast.LENGTH_LONG).show();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
Double geoLat = location.getLatitude()*1E6;
Double geoLng = location.getLongitude()*1E6;
GeoPoint point = new GeoPoint(geoLat.intValue(), geoLng.intValue());
mapController.animateTo(point);
tvLatitudine.setText(Double.toString(getRound(location.getLatitude(), 5)));
tvLongitudine.setText(Double.toString(getRound(location.getLongitude(), 5)));
tvVelocita.setText(Double.toString(getRound(location.getSpeed()*3.6, 1))+" km/h");
tvQuota.setText(Integer.toString((int)location.getAltitude())+" m");
tvAccuratezza.setText(Integer.toString((int)location.getAccuracy())+" m");
public void onProviderDisabled(String provider) {
Toast.makeText(GPSActivity.this,
"onProviderDisabled "+provider, Toast.LENGTH_SHORT).show();
public void onProviderEnabled(String provider) {
Toast.makeText(GPSActivity.this,
"onProviderEnabled "+provider, Toast.LENGTH_SHORT).show();
public void onStatusChanged(String provider, int status,Bundle extras) {
Toast.makeText(GPSActivity.this,
"onStatusChanged "+provider+" status: "+status, Toast.LENGTH_SHORT).show();
if(locationManager != null){
locationManager.removeUpdates(locationListener);
myLocationOverlay.disableMyLocation();
protected void onResume() {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
myLocationOverlay.enableMyLocation();
public static double getRound(double x, int digits){
double powerOfTen = Math.pow(10, digits);
return ((double)Math.round(x * powerOfTen) / powerOfTen);
protected boolean isRouteDisplayed() {