Autore Topic: localizzazione tramite rete  (Letto 1224 volte)

Offline lucacali87

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg dual
  • Sistema operativo:
    windows seven
localizzazione tramite rete
« il: 14 Marzo 2013, 19:42:27 CET »
0
Salve, ho appena effettuato la localizzazione tramite gps(ottenendo indirizzo e città), volevo fare lo stesso usando la rete, ovviamente ottenendo una localizzazione peggiore.
Il problema è che non riesco a capire come fare, ho provato un pò di codice così

Codice: [Seleziona]
locationManager = (LocationManager) contextAvvioActivity
                                .getSystemService(Context.LOCATION_SERVICE); 
Location location=locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
               
                                                latitudine = location.getLatitude();
                                                longitudine = location.getLongitude();
                                                // Debug
                                                Log.i("Latitudine: ", String.valueOf(latitudine));
                                                Log.i("Longitudine: ", String.valueOf(longitudine))
;

avete consigli o un pezzo di codice per ottenere da network le cordinate?

                  

Offline crc_error

  • Utente junior
  • **
  • Post: 85
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Windows 8, Ubuntu 12
Re:localizzazione tramite rete
« Risposta #1 il: 18 Marzo 2013, 19:10:34 CET »
+2
Ciao!

Con getLastKnownLocation() restituisci un oggetto location solo se qualche app l'ha già usato ed ottenuto delle coordinate, altrimenti ti ritorna null.
Nel caso non restituisca null, non è detto che le coordinate corrispondano al punto (o l'area) in cui ti trovi.

Per calcolare la posizione col NETWORK_PROVIDER (come per il GPS) devi creare un listener che lo "ascolti" e chiamare il metodo requestLocationUpdates() sul location manager.

Spero di esserti stato utile ;)

Ciao

Offline lucacali87

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg dual
  • Sistema operativo:
    windows seven
Re:localizzazione tramite rete
« Risposta #2 il: 18 Marzo 2013, 20:39:23 CET »
0
grazie appena ho tempo provo così allora :)

Offline lucacali87

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg dual
  • Sistema operativo:
    windows seven
Re:localizzazione tramite rete
« Risposta #3 il: 24 Marzo 2013, 16:25:06 CET »
0
provato così come fatto con il gps ma mi da errore sul requestLocationUpdates

Codice: [Seleziona]
public Localizzazione3g(Context context) {
                this.contextAvvioActivity = context;

               
               
                infoPosizioneRilevata = false;

                geocoder = new Geocoder(context);
               

                avvia();
                avviaMonitoraggioCoordinate();
               
       
        }

        /* Metodo privato per l'avvio */
        private void avvia() {
                locationManager = (LocationManager) contextAvvioActivity
                                .getSystemService(Context.LOCATION_SERVICE);

               
               
        }


       
        /* Metodo privato che avvia il monitoraggio delle coordinate */
        private void avviaMonitoraggioCoordinate() {
                Log.i("3g", "Rilevamento posizione 3g");
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
                                MINTIME, MINDISTANCE, new LocationListener() {

                                        public void onLocationChanged(Location location) {
                                                // TODO Auto-generated method stub
                                                latitudine = location.getLatitude();
                                                longitudine = location.getLongitude();
                                                // Debug
                                                Log.i("Latitudine: ", String.valueOf(latitudine));
                                                Log.i("Longitudine: ", String.valueOf(longitudine));
                                                infoPosizioneRilevata = rilevaInfoPosizione();
                                                locationManager.removeUpdates(this);
                                        }

                                        public void onProviderDisabled(String provider) {
                                                 //TODO Auto-generated method stub

                                        }

                                        public void onProviderEnabled(String provider) {
                                                 //TODO Auto-generated method stub

                                        }

                                        public void onStatusChanged(String provider, int status,
                                                        Bundle extras) {
                                                // TODO Auto-generated method stub

                                        }

                                });
        }
       
        /*
         * Metodo privato che consente di rilevare le informazioni sulla posizione
         * attuale dell'utente
         */
        private boolean rilevaInfoPosizione() {
                try {
                       
                        List<Address> addresses = geocoder.getFromLocation(latitudine, longitudine,1);
                         
                       
                        if (addresses != null && addresses.size() > 0) {
                                Log.i("Info ERRORE","Ricerca nome città");   
                Address address = addresses.get(0);
                citta=address.getLocality();
                    indirizzo=address.getAddressLine(0);
                        }else{
                                Log.i("Info ERROREInternet","Attivare connessione");
                                //richiedere connessione internet se si vuole la città altrimenti si salvano cordinate gps, attivare internet?
                        }
                        return true;
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();

                        // Debug
                        Log.i("Errore Reverse Geocoding: ", e.getMessage());
                        return false;
                }
        }

Offline crc_error

  • Utente junior
  • **
  • Post: 85
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Windows 8, Ubuntu 12
Re:localizzazione tramite rete
« Risposta #4 il: 24 Marzo 2013, 22:04:12 CET »
0
Che errore ti da?

Offline lucacali87

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg dual
  • Sistema operativo:
    windows seven
Re:localizzazione tramite rete
« Risposta #5 il: 25 Marzo 2013, 15:30:40 CET »
0
vero mi so scordato il log :D

Codice: [Seleziona]
03-25 14:29:08.952: I/3g(622): Rilevamento posizione 3g
03-25 14:29:08.982: D/AndroidRuntime(622): Shutting down VM
03-25 14:29:08.982: W/dalvikvm(622): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
03-25 14:29:09.012: E/AndroidRuntime(622): FATAL EXCEPTION: main
03-25 14:29:09.012: E/AndroidRuntime(622): java.lang.IllegalArgumentException: requested provider network doesn't exisit
03-25 14:29:09.012: E/AndroidRuntime(622):         at android.os.Parcel.readException(Parcel.java:1429)
03-25 14:29:09.012: E/AndroidRuntime(622):         at android.os.Parcel.readException(Parcel.java:1379)
03-25 14:29:09.012: E/AndroidRuntime(622):         at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:659)
03-25 14:29:09.012: E/AndroidRuntime(622):         at android.location.LocationManager._requestLocationUpdates(LocationManager.java:664)
03-25 14:29:09.012: E/AndroidRuntime(622):         at android.location.LocationManager.requestLocationUpdates(LocationManager.java:486)
03-25 14:29:09.012: E/AndroidRuntime(622):         at com.example.diariodelpescatore.Localizzazione3g.avviaMonitoraggioCoordinate(Localizzazione3g.java:72)
03-25 14:29:09.012: E/AndroidRuntime(622):         at com.example.diariodelpescatore.Localizzazione3g.<init>(Localizzazione3g.java:53)
03-25 14:29:09.012: E/AndroidRuntime(622):         at com.example.diariodelpescatore.PosizioneActivity$2.onClick(PosizioneActivity.java:131)
03-25 14:29:09.012: E/AndroidRuntime(622):         at android.view.View.performClick(View.java:4084)
03-25 14:29:09.012: E/AndroidRuntime(622):         at android.view.View$PerformClick.run(View.java:16966)
03-25 14:29:09.012: E/AndroidRuntime(622):         at android.os.Handler.handleCallback(Handler.java:615)
03-25 14:29:09.012: E/AndroidRuntime(622):         at android.os.Handler.dispatchMessage(Handler.java:92)
03-25 14:29:09.012: E/AndroidRuntime(622):         at android.os.Looper.loop(Looper.java:137)
03-25 14:29:09.012: E/AndroidRuntime(622):         at android.app.ActivityThread.main(ActivityThread.java:4745)
03-25 14:29:09.012: E/AndroidRuntime(622):         at java.lang.reflect.Method.invokeNative(Native Method)
03-25 14:29:09.012: E/AndroidRuntime(622):         at java.lang.reflect.Method.invoke(Method.java:511)
03-25 14:29:09.012: E/AndroidRuntime(622):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-25 14:29:09.012: E/AndroidRuntime(622):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-25 14:29:09.012: E/AndroidRuntime(622):         at dalvik.system.NativeStart.main(Native Method)
03-25 14:29:14.142: D/gralloc_goldfish(638): Emulator without GPU emulation detected.

Offline crc_error

  • Utente junior
  • **
  • Post: 85
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Windows 8, Ubuntu 12
Re:localizzazione tramite rete
« Risposta #6 il: 25 Marzo 2013, 16:42:53 CET »
0
Credo sia un problema dell'emulatore.. Dai un'occhio qua: https://code.google.com/p/android/issues/detail?id=19857

Prova lanciarla su un emulatore con ginger o froyo (2.3 e 2.2)