Autore Topic: Gps & Rete , ricavare posizione  (Letto 2994 volte)

Offline max246

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    G1
  • Play Store ID:
    Christian
Gps & Rete , ricavare posizione
« il: 13 Agosto 2010, 12:22:25 CEST »
0
Vorrei ricavare il nome del paese dove si trova il telefono o la città dove è collegato tramite l'antenna ( se non è abilitato il gps ).

Ora riesco a ricavare le coordinate ma come faccio a fare un "query" per ricavare il nome del paese?

Codice (Java): [Seleziona]
 // Otteniamo il riferimento al LocationManager
                locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                    // Verifichiamo se il GPS è abilitato altrimenti avvisiamo l'utente
                if(!locationManager.isProviderEnabled("gps")){
                        Toast.makeText(this, "GPS è attualmente disabilitato. E' possibile abilitarlo dal menu impostazioni.", Toast.LENGTH_LONG).show();
                }

                // Registriamo il LocationListener al provider GPS
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);



    }
    LocationListener locationListener = new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {


                        // Aggiorna la location
                        Double geoLat = location.getLatitude()*1E6;
                        Double geoLng = location.getLongitude()*1E6;
                        TextView tv = (TextView) findViewById(R.id.widget158);
                        tv.setText(geoLat.toString());
                }
« Ultima modifica: 13 Agosto 2010, 13:38:52 CEST da JD, Reason: Usate i bbcode java e xml!! xD »

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Gps & Rete , ricavare posizione
« Risposta #1 il: 13 Agosto 2010, 13:42:55 CEST »
0
Non ho modo di testarlo ora, prova comunque questo snippet:

Codice (Java): [Seleziona]
Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault());  
List<Address> myList = myLocation.getFromLocation(latPoint, lngPoint, 1);

Non scordarti le permission:
Codice (XML): [Seleziona]
<uses-permission android:name="android.permission.INTERNET" />
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Gps & Rete , ricavare posizione
« Risposta #2 il: 13 Agosto 2010, 15:28:40 CEST »
0
Perfetto, lo snippet funziona:

Codice (Java): [Seleziona]
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);

                // Otteniamo il riferimento al LocationManager
                LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                // Verifichiamo se il GPS è abilitato altrimenti avvisiamo l'utente
                if(!locationManager.isProviderEnabled("gps")){
                        Toast.makeText(this, "GPS è attualmente disabilitato. E' possibile abilitarlo dal menu impostazioni.", Toast.LENGTH_LONG).show();
                }

                // Registriamo il LocationListener al provider GPS
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

               

        }

        LocationListener locationListener = new LocationListener() {
                public void onLocationChanged(Location location) {
                         if (location != null) {
                                    double lat = location.getLatitude();
                                    double lng = location.getLongitude();

                                    Geocoder gc = new Geocoder(getApplicationContext(), Locale.getDefault());
                                   
                                    try {
                                      List<Address> addresses = gc.getFromLocation(lat, lng, 1);
                                      StringBuilder sb = new StringBuilder();
                                      if (addresses.size() > 0) {
                                        Address address = addresses.get(0);

                                        sb.append(address.getLocality()).append("\n");
                                        sb.append(address.getCountryName());
                                      }

                                      System.out.println(sb.toString());
                                    } catch (IOException e) {}
                                  } else {
                                    //No location found
                                  }

                }

                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
                       
                }      
        };

Occhio però che il Target 8 (froyo) dell'emulatore è buggato e genera un Geocoder throws IOException: Service not available.
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline max246

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    G1
  • Play Store ID:
    Christian
Re:Gps & Rete , ricavare posizione
« Risposta #3 il: 13 Agosto 2010, 17:34:17 CEST »
0
Questo funziona solo con il gps giusto?
Eventualmente se volessi ricavare la posizione tramite la triangolazione dell'antenna come faccio?

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Gps & Rete , ricavare posizione
« Risposta #4 il: 13 Agosto 2010, 20:37:46 CEST »
0
Niente di più facile, anziché utilizzare il provider GPS:
Codice (Java): [Seleziona]
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
basta utilizzare il provider Network:
Codice (Java): [Seleziona]
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline max246

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    G1
  • Play Store ID:
    Christian
Re:Gps & Rete , ricavare posizione
« Risposta #5 il: 13 Agosto 2010, 23:27:52 CEST »
0
e.. scusa la mia ignoranza ma le coordinate non le riesce a trovare visto che se hai solo 1 o 2 antenne ti puo dire a quale città sei vicino.
Perciò come faccio? :P

Un'altro problema è quella che quando ho il gps disattivato l'applicazione vai in crash invece di farmi uscire il messaggio

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Gps & Rete , ricavare posizione
« Risposta #6 il: 14 Agosto 2010, 01:36:58 CEST »
0
ehm, non mi è chiaro, vorresti poter triangolare la tua posizione senza avere almeno 3 antenne a disposizione? Non credo ci siano molte soluzioni: se hai abbastanza antenne usi la NETWORK, altrimenti usi la GPS, se neanche quella va accosti e chiedi al primo che passa :P.

Riguardo al crash domani faccio qualche prova.
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline max246

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    G1
  • Play Store ID:
    Christian
Re:Gps & Rete , ricavare posizione
« Risposta #7 il: 14 Agosto 2010, 08:15:27 CEST »
0
Facciamo un esempio pratico tratto da latitude:
Lui se non trova il gps si basa su una triangolazione delle antenne e molte volte non è preciso ( perchè nel mio paese non ci sono abbastanze antenne ) ma riesce a dirti che sei vicino a un paese.
Io vorrei che se il gps non è attivo puo comunque ricavare dove sei o almeno approssimato come fa latitude.

Offline max246

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    G1
  • Play Store ID:
    Christian
Re:Gps & Rete , ricavare posizione
« Risposta #8 il: 14 Agosto 2010, 08:53:46 CEST »
0
Vabbe ho provato e funziona comunque :) Grazie!
L'unica cosa è che vorrei far uscire un "loading" o che poi intanto che cerca di trovarmi, ma visto che è un listening non so come fare :S

Risolto pure il crash se non hai attivo il gps
« Ultima modifica: 14 Agosto 2010, 08:59:22 CEST da max246 »

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Gps & Rete , ricavare posizione
« Risposta #9 il: 14 Agosto 2010, 17:51:33 CEST »
0
Risolto pure il crash se non hai attivo il gps

Come?
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline max246

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    G1
  • Play Store ID:
    Christian
Re:Gps & Rete , ricavare posizione
« Risposta #10 il: 14 Agosto 2010, 17:54:55 CEST »
0
quando faccio il controllo "if" facevo uscire il messaggio che non è attivo e poi continuavo con l'inizalizzazione del gps e li anda in crash... era anche ovvio :P
Ora ho messo che se non è attivo uso la network altrimenti il gps

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
Re:Gps & Rete , ricavare posizione
« Risposta #11 il: 24 Gennaio 2011, 10:09:41 CET »
0
Salve! mi è molto utile questo post perchè avevo fatto ciò che c'è scritto nel sito android developer, ma non riuscivo ad andare avanti. Comunque, non riesco a capire come far visualizzare la stringa sb che contiene il nome del paese. ho fatto una textview. il gps aggancia , tutto ok, ma l'app non mi stampa la stringa!
ecco il pezzo di codice dove ho inserito la textview. C'è un'altro modo per visualizzare l'info? a me converrebbe ina una textview....
Codice (Java): [Seleziona]
LocationListener locationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                     if (location != null) {
                                double lat = location.getLatitude();
                                double lng = location.getLongitude();

                                Geocoder gc = new Geocoder(getApplicationContext(), Locale.getDefault());
                               
                                try {
                                  List<Address> addresses = gc.getFromLocation(lat, lng, 1);
                                  StringBuilder sb = new StringBuilder();
                                  if (addresses.size() > 0) {
                                    Address address = addresses.get(0);

                                    sb.append(address.getLocality()).append("\n");
                                    sb.append(address.getCountryName());
                                  }
                                TextView ecco_dove_sono=(TextView)findViewById(R.id.TextView01);
                                ecco_dove_sono.setText(sb.toString());
                                  System.out.println(sb.toString());
                                } catch (IOException e) {}
                              } else {
                                //No location found
                              }

            }

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

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
Re:Gps & Rete , ricavare posizione
« Risposta #12 il: 24 Gennaio 2011, 14:20:53 CET »
0
ok, scusatemi tanto! errore mio! non avevo più credito e connettendomi in modalità 3g, non me ne ero accorto  :-[  funziona tutto alla perfezione!

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
Re:Gps & Rete , ricavare posizione
« Risposta #13 il: 28 Gennaio 2011, 22:15:56 CET »
0
Salve ragazzi...
a me piacerebbe ricavare il nome del paese utilizzando solo es esclusivamente il gps! si può fare? o devo per forza accedere a internet?
Grazie in anticipo

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Gps & Rete , ricavare posizione
« Risposta #14 il: 29 Gennaio 2011, 00:11:53 CET »
0
La seconda che hai detto...
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !