Autore Topic: Dubbio funzionamento GPS e LocationListener  (Letto 650 volte)

Offline Darèios89

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG G2
Dubbio funzionamento GPS e LocationListener
« il: 24 Agosto 2012, 22:21:42 CEST »
0
Salve a tutti, ho un' applicazione, funziona, cioè si avvia, si vede la mappa e tutto, siccome non ho la connessione 3G con abbonamento, non riesco a prendere bene il segnale del GPS in balcone....vorrei postarvela perchè non ho capito se funziona o meno, vorrei fare in modo che se ho il GPS attivo avviando l' applicazione mi venga centrata la mappa nella posizione corrente e visualizzata con un overlay....secondo voi funziona così? Ho il dubbio che possa andare perchè forse all' avvio il GPS deve sempre agganciarsi e ci mette un pò, non so se è corretta l' implementazione degli Overlay.

Codice: [Seleziona]
package it.apogeo.android.cap11.customcontrollermap;
import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.Window;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
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 com.google.android.maps.OverlayItem;


public class CustomControllerMapActivity extends MapActivity /*implements LocationListener*/ {
        /*
         * Tag del log
         */
        private final static String LOG_TAG = "CustomControllerMapActivity";
        /*
         
         */

        /*
         * Riferimento alla MapView
         */
        private MapView mapView;
        /*
         * Riferimento al MapController
         */
        private MapController mapController;       
       
    //Riferimento al MyLocationOverlay
    private MyLocationOverlay myLocationOverlay;

    // Otteniamo il riferimento al LocationManager
    LocationManager locationManager;
   

   
    //Riferimento al provider
    Location location;
     
   
    /*private void setCurrentLocation(Location location) {
            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            int latitudeE6 = (int) Math.floor(latitude * 1.0E6);
            int longitudeE6 = (int) Math.floor(longitude * 1.0E6);
            GeoPoint geoPoint = new GeoPoint(latitudeE6, longitudeE6);
            mapController.setCenter(geoPoint);
            //mapController.animateTo(geoPoint);
            }*/
   

   /* private boolean CheckIntConn() {
        ConnectivityManager connectivityManager
              = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null;
    }*/
   
   
    LocationListener locationListener = new LocationListener() {
      //  @Override
        public void onLocationChanged(Location location) {
                // Aggiorna il marker della mappa
                mapView.invalidate();

                // Aggiorna la location
                Double geoLat = location.getLatitude()*1E6;
                Double geoLng = location.getLongitude()*1E6;
                GeoPoint point = new GeoPoint(geoLat.intValue(), geoLng.intValue());
                mapController.setCenter(point);
                mapController.animateTo(point);
        }

       // @Override
        public void onProviderDisabled(String provider) {
                Toast.makeText(CustomControllerMapActivity.this,
                                "onProviderDisabled "+provider, Toast.LENGTH_SHORT).show();
                 
        }

       // @Override
        public void onProviderEnabled(String provider) {
                Toast.makeText(CustomControllerMapActivity.this,
                                "onProviderEnabled "+provider, Toast.LENGTH_SHORT).show();
               
        }

      //  @Override
        public void onStatusChanged(String provider, int status,Bundle extras) {
                Toast.makeText(CustomControllerMapActivity.this,
                                "onStatusChanged "+provider+" status: "+status, Toast.LENGTH_SHORT).show();
        }
       
     
};

public static double getRound(double x, int digits){
    double powerOfTen = Math.pow(10, digits);
    return ((double)Math.round(x * powerOfTen) / powerOfTen);
}

private class MyItemizedOverlay extends ItemizedOverlay {
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

    public MyItemizedOverlay(Drawable defaultMarker) {
          super(boundCenterBottom(defaultMarker));
    }

    public void addOverlay(OverlayItem overlay) {
        mOverlays.add(overlay);
        populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
      return mOverlays.get(i);
    }

    @Override
    public int size() {
      return mOverlays.size();
    }
}

private void updateLocationOverlay() {
    if (location == null) { return; }
    List<Overlay> mapOverlays = mapView.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.freccia);
    MyItemizedOverlay myItemizedOverlay = new MyItemizedOverlay(drawable);
    GeoPoint point = new GeoPoint((int)(location.getLatitude() * 1E6), (int)(location.getLongitude() * 1E6));

    OverlayItem overlayitem = new OverlayItem(point, "Hello!", "It's my location!");
    myItemizedOverlay.addOverlay(overlayitem);
    mapOverlays.add(myItemizedOverlay);
    mapController.setCenter(point);
    mapController.animateTo(point);
   
}


   
   
   
   
   
 
   
   
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        // Mettiamo la View a tutto schermo
        requestWindowFeature(Window.FEATURE_NO_TITLE);
       
        //Visualizziamo la mappa
        setContentView(R.layout.main);
       
        // Otteniamo il riferimento alla MapView
        mapView = (MapView)findViewById(R.id.mapView);
       
       
        // Otteniamo il riferimento al LocationManager
        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
     
     
  // Registriamo il LocationListener al provider GPS
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5, 1, locationListener);
     
     
     //Usiamo il provider Location GPS
     location= locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
     
 
       
         
       
        // Otteniamo il riferimento al controller
        mapController = mapView.getController();
      Log.i(LOG_TAG, "MapController obtained!");
      mapController.setZoom(20);
      //this.updateLocationOverlay();
     // this.setCurrentLocation(location);
       
 
     
        // Rendiamo la mappa cliccabile e quindi ne permettiamo
        // il pan
        mapView.setClickable(true);
        mapView.setBuiltInZoomControls(true);
       
       
       
        if(location==null){         //Non c' è il gps, utilizzo la rete
               
        // Aggiungiamo l'overlay sulla mappa della nostra posizione
                myLocationOverlay = new MyLocationOverlay(this, mapView);
                List<Overlay> overlays = mapView.getOverlays();
                overlays.add(myLocationOverlay);
                myLocationOverlay.enableMyLocation();
        }
       
        if(location!=null){
               
                if(myLocationOverlay!=null)
                myLocationOverlay.disableMyLocation();
               
                this.updateLocationOverlay();
        }
       
       

       
       
       
       
       
        //Verifichiamo se il GPS è abiliato
        if(!locationManager.isProviderEnabled("gps")){
                Toast.makeText(this, "GPS attualmente disabilitato. Abilitare per una maggiore precisione.", Toast.LENGTH_LONG).show();
        }
       
   
       
       
       /* // Verifichiamo se la rete è abilitata
        if(!CheckIntConn()){
                AlertDialog.Builder miaAlert = new AlertDialog.Builder(this);
                miaAlert.setTitle("Errore di connessione");
                miaAlert.setMessage("Abilitare il GPS prima di avviare l' applicazione.")
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                     CustomControllerMapActivity.this.finish();
                }
            });
                AlertDialog alert = miaAlert.create();
                miaAlert.show();
    }
        */
       
   
       
  }
   
    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Menù di gestione modalità di visualizzazione che, per renderle checkable
                // le inseriamo in un sottomenu
                SubMenu mapSubMenu = menu.addSubMenu("Map Modes");
                mapSubMenu.setIcon(android.R.drawable.ic_menu_mapmode);
                int firstItem = Menu.FIRST;
                MenuItem trafficItem = mapSubMenu.add(1, firstItem, firstItem, "Traffic");
                trafficItem.setCheckable(true);
                trafficItem.setChecked(true);
                MenuItem satelliteItem = mapSubMenu.add(1, firstItem+1, firstItem+1, "Satellite");
                satelliteItem.setCheckable(true);
                // Visualizziamo il menu
                return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                // Modifichiamo lo stato di quella selezionata
                item.setChecked(!item.isChecked());
                // Abilitiamo o meno l'opzione relativa
                switch(item.getItemId()){
                case Menu.FIRST:
                        mapView.setTraffic(item.isChecked());
                        break;
                case Menu.FIRST+1:
                        mapView.setSatellite(item.isChecked());
                        break;
                }
                       
                return super.onOptionsItemSelected(item);
        }
   
    @Override
        protected boolean isRouteDisplayed() {
                return false;
        }
}