Autore Topic: Gestione posizione utente grossolana  (Letto 646 volte)

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 277
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    S2
  • Sistema operativo:
    Xubuntu
Gestione posizione utente grossolana
« il: 02 Marzo 2018, 10:15:51 CET »
0
Ciao a tutti,
avevo lavorato in passato con la posizione dell'utente ma ci sono alcune cose che - forse per dimenticanza - non mi tornano più.
Vi spiego cosa vorrei realizzare.

Vorrei ottenere la posizione grossolana dell'utente, non precisa.
Mi basta ottenga - esempio - "Roma, Italy".

Aggiungo l'autorizzazione nel file AndroidManifest.xm
Codice (XML): [Seleziona]
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Codice (Java): [Seleziona]
    public String getUserPosition() {

        LocationManager locationManager = (LocationManager ) context.getSystemService( Context.LOCATION_SERVICE );
        Location net_loc    =   null;

        if ( locationManager.isProviderEnabled( LocationManager.NETWORK_PROVIDER ) ) {
            try {
                net_loc = locationManager.getLastKnownLocation( LocationManager.NETWORK_PROVIDER );


                return net_loc.getLatitude() + ", " + net_loc.getLongitude();
            }
            catch ( SecurityException e ) {
                e.printStackTrace();
            }
        }

        return "";
    }
E già qui con l'emulatore ho difficoltà perchè non restituisce nulla...

Ma poi, date le seguenti coordinate, come trasformarle nel risultato che desidero?

Prima di essere linciato perchè capisco la banalità della domanda, mi scuso adducendo come giustificazione il fatto che sono un poò confuso tra le varie modalità con cui potrei ottenere tale risultato, perchè nelle API trovo getLastLocation() ed altri modi per ottenere l'ultima posizione, poichè non mi interessa precisamente dov'e' l'utente...basta che capisca che è a Roma e non a Palermo :D

Grazie in anticipo a chiunque risponderà :)

PS: COARSE_LOCATION necessita di essere autorizzato come autorizzazione?

Offline iClaude

  • Utente normale
  • ***
  • Post: 323
  • Respect: +27
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Gestione posizione utente grossolana
« Risposta #1 il: 02 Marzo 2018, 10:57:56 CET »
+1
Per prima cosa ti conviene usare le API di Google Play Services perché quelle di Android sono deprecate:
https://developer.android.com/training/location/retrieve-current.html

Quindi puoi usare il reverse geocoding per ottenere l'Address:
https://developer.android.com/training/location/display-address.html

Vedi la classe Address: mi pare che il metodo getLocality() possa fare al caso tuo:
https://developer.android.com/reference/android/location/Address.html

PS. COARSE_LOCATION va bene per i tuoi scopi.

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 277
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    S2
  • Sistema operativo:
    Xubuntu
Re:Gestione posizione utente grossolana
« Risposta #2 il: 02 Marzo 2018, 18:56:43 CET »
0
Grazie per la risposta, come forse ho puntualizzato in altri topic sono un vecchissimo sviluppatore che poi per vari motivi ha interrotto ed ora con un poò di tempo libero riprende :)

Leggo subito i link che mi hai postato, ed intanto ti ringrazio

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 277
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    S2
  • Sistema operativo:
    Xubuntu
Re:Gestione posizione utente grossolana
« Risposta #3 il: 03 Marzo 2018, 21:09:33 CET »
0
Ho realizzato questa funzione ad hoc ma non sembra funzionare nemmeno nell'emulatore su cui sto testando che è Android 4.0 e non richiede permessi.

Codice (Java): [Seleziona]
    @SuppressLint("MissingPermission")
    public String getUserPosition( Activity act )
    {
        lastLocation    =   "-";

        FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient( act.getApplicationContext() );
        mFusedLocationClient.getLastLocation().addOnSuccessListener( act,
                                                                    new OnSuccessListener<Location>()
                                                                    {
                                                                        @Override
                                                                        public void onSuccess(Location location)
                                                                        {
                                                                            // Got last known location. In some rare situations this can be null.
                                                                            if ( location != null )
                                                                            {
                                                                                lastLocation    =   location.getLatitude() + ", " + location.getLongitude();
                                                                            }
                                                                        }
                                                                    }
                                                                );
        return lastLocation;
    }

Qualche suggerimento? :D

Offline iClaude

  • Utente normale
  • ***
  • Post: 323
  • Respect: +27
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Gestione posizione utente grossolana
« Risposta #4 il: 06 Marzo 2018, 10:37:56 CET »
0
Verifica che onSuccess venga invocato, e poi che Location non sia null.