Autore Topic: Modificare l' overlay in base al network oppure al GPS  (Letto 1154 volte)

Offline Darèios89

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG G2
Modificare l' overlay in base al network oppure al GPS
« il: 01 Settembre 2012, 11:49:37 CEST »
0
Ho un' applicazione in cui viene effettuato il controllo iniziale sulla presenza della rete e del GPS, in base a quale delle due sia attiva, viene visualizzato un overlay, ora quello che vorrei fare è avere un modo che testi ripetutamente se io improvvisamente disattivi il GPS, ed in caso calcoli la posizione mediante network e cambi l' overlay. Ho già inserito dei metodi come onproviderdisabled(), ma all' esterno dell' onCreate, solo che lì non posso lavorare con il LocationManager perchè ho degli errori...

Offline Darèios89

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG G2
Re:Modificare l' overlay in base al network oppure al GPS
« Risposta #1 il: 04 Settembre 2012, 14:31:21 CEST »
0
Nessuno sa dirmi se è possibile farlo e magari come?

Offline zak84

  • Utente normale
  • ***
  • Post: 165
  • Respect: +2
    • Mostra profilo
Re:Modificare l' overlay in base al network oppure al GPS
« Risposta #2 il: 04 Settembre 2012, 17:03:49 CEST »
+1
Non sò se può fare al caso tuo ma:
se nell'onCreate metti
Codice: [Seleziona]
        LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        LocationListener mlocListener = new MyLocationListener();
        mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 60000, 0, mlocListener);
dove 60000 è il tempo di attesa tra un check e l'altro, e poi fuori dall'onCreate
Codice: [Seleziona]
    /* Class My Location Listener */
    public class MyLocationListener implements LocationListener{
            @Override
            public void onLocationChanged(Location loc){
                GeoPoint mio_point = new GeoPoint((int)(loc.getLatitude()*1E6), (int)(loc.getLongitude()*1E6));
                mapView.getController().setCenter(mio_point);
                mapView.getController().animateTo(mio_point);
                // fai quello che devi fare
            }
            @Override
            public void onProviderDisabled(String provider){
                    Toast.makeText( getParent(),"Gps disabilitato",Toast.LENGTH_SHORT ).show();
            }
            @Override
            public void onProviderEnabled(String provider){
                    Toast.makeText( getParent(),"Gps abilitato",Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras){
       
            }
    }

e lavori questi codici?

Offline Darèios89

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG G2
Re:Modificare l' overlay in base al network oppure al GPS
« Risposta #3 il: 04 Settembre 2012, 21:34:26 CEST »
0
Ho messo già da prima fuori dall' onCreate:

Codice: [Seleziona]
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.content.Context;
import android.content.res.Configuration;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
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.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

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


public class CustomControllerMapActivity extends MapActivity{
        /*
         * 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;
     
            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);
          }

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

         // @Override
          public void onProviderEnabled(String provider) {
                  Toast.makeText(CustomControllerMapActivity.this,
                                  "GPS abilitato", 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 boolean updateLocationOverlay() {
                        if (location == null) { return false; }
                                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, "", "");
                                        myItemizedOverlay.addOverlay(overlayitem);
                                        mapOverlays.add(myItemizedOverlay);
                                        mapController.setCenter(point);
                                        mapController.animateTo(point);
                                       
                return true;
        }


E nel onCreate:

Codice: [Seleziona]
@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);
       
       
        //Verifichiamo se il GPS è abiliato
        if(!locationManager.isProviderEnabled("gps")){
                Toast.makeText(this, "GPS disabilitato. Abilitare per una maggiore precisione.", Toast.LENGTH_LONG).show();
        }
       
        // Otteniamo il riferimento al controller
        mapController = mapView.getController();
        Log.i(LOG_TAG, "MapController obtained!");
        mapController.setZoom(20);

        // Rendiamo la mappa cliccabile e quindi ne permettiamo
        // il pan
        mapView.setClickable(true);
        mapView.setBuiltInZoomControls(true);
       
        // 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);
        .
        .
        .
        .

Così funziona secondo te?

Non ho 3G per provare....mi piacerebbe che in base alla rete se c' è il GPS usi quello, se lo stacco manualmente passi alla locazine dal wifi o dalla 3G cambiando l' overaly....
Altra cosa....in alcuni casi ottenevo dei nullpointer quando facevo qualcosa come
Codice: [Seleziona]
location.getLatitude() usando il GPS, può darsi che dipende dal fatto che ancora mi lampeggia il GPS e quindi ovviamente non è stato trovato?

Offline zak84

  • Utente normale
  • ***
  • Post: 165
  • Respect: +2
    • Mostra profilo
Re:Modificare l' overlay in base al network oppure al GPS
« Risposta #4 il: 05 Settembre 2012, 09:42:36 CEST »
+1
purtroppo non sò darti risposta certa, sò solo che se in "posizione" l'utente ha abilitato sia wifi che gps, allora tuto funziona.
mi sà che non riesco ad aiutarti su questo problema preciso

Offline Darèios89

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG G2
Re:Modificare l' overlay in base al network oppure al GPS
« Risposta #5 il: 05 Settembre 2012, 11:49:42 CEST »
0
Figurati, grazie dell' interesse e della disponibilità.  :-)