Autore Topic: Servizi di localizzazione non funzionanti su 2.3.3  (Letto 1266 volte)

Offline Elmvor

  • Utente normale
  • ***
  • Post: 166
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 14.04, Windows 8.1
Servizi di localizzazione non funzionanti su 2.3.3
« il: 24 Gennaio 2014, 09:58:56 CET »
0
Salve. Sto cercando di far funzionare la mia app sul telefono di un mio amico che ha android 2.3.3. A quanto pare tutto ciò che
a che fare con la localizzazione non funziona ed ottengo NullPointerException. Sul mio telefono funziona tutto alla perfezione.
Da cosa può dipendere?

Offline Reinhard

  • Utente junior
  • **
  • Post: 85
  • Respect: +16
    • Google+
    • rspisser
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5 Lollipop 5.1
  • Play Store ID:
    rspisser
  • Sistema operativo:
    Windows 7
Re:Servizi di localizzazione non funzionanti su 2.3.3
« Risposta #1 il: 24 Gennaio 2014, 12:36:27 CET »
0
cosa intendi con "localizzazione non funziona"?

puoi postare il pezzo di codice che fa la "localizzazione?

Offline Elmvor

  • Utente normale
  • ***
  • Post: 166
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 14.04, Windows 8.1
Re:Servizi di localizzazione non funzionanti su 2.3.3
« Risposta #2 il: 24 Gennaio 2014, 12:44:53 CET »
0
Hai presente che nell'uso delle mappe c'è il pulsantino in alto a destra che ti porta alla tua posizione? Ad esempio se si preme
quello non accade nulla. Il classico pallino azzurro posto nella tua posizione nemmeno si vede. Se provo ad avviare metodi che
utilizzano il LocationClient ottengo NullPointerException.

Codice: [Seleziona]
//Variabile di classe
private Location mCurrentLocation;

//Che inizializzo nell'onCreate...
mLocationClient = new LocationClient(this, mConnectionCallbacks, mOnConnectionFailedListener);

onStart

Codice: [Seleziona]
protected void onStart() {
        super.onStart();
        //Connettiamo il LocationClient
        mLocationClient.connect();
    }

onStop

Codice: [Seleziona]
//Disconnettiamo il LocationClient
        if(mLocationClient.isConnected()) {
            mLocationClient.removeLocationUpdates(mLocationListener);
        }
        mLocationClient.disconnect();
        super.onStop();

Gestione

Codice: [Seleziona]
private GooglePlayServicesClient.ConnectionCallbacks mConnectionCallbacks
            = new GooglePlayServicesClient.ConnectionCallbacks() {

        @Override
        public void onConnected(Bundle bundle) {
            Toast.makeText(MainActivity.this, "Connesso", Toast.LENGTH_SHORT).show();
            //Otteniamo la nostra posizione
            mCurrentLocation = mLocationClient.getLastLocation();
            if (mCurrentLocation != null) {
                Toast.makeText(MainActivity.this, "Ultima Location: "
                        + mCurrentLocation.getLatitude() + ","
                        + mCurrentLocation.getLongitude() , Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "Location non ancora disponibile", Toast.LENGTH_SHORT).show();
            }
            final LocationRequest locationRequest = new LocationRequest();
            locationRequest.setInterval(UPDATE_INTERVAL);
            locationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL);
            locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
            mLocationClient.requestLocationUpdates(locationRequest, mLocationListener);
        }

        @Override
        public void onDisconnected() {
            Toast.makeText(MainActivity.this, "Disconnesso", Toast.LENGTH_SHORT).show();
        }
    };

    private GooglePlayServicesClient.OnConnectionFailedListener mOnConnectionFailedListener =
            new GooglePlayServicesClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(ConnectionResult connectionResult) {
                    // Here we check if the connectionResult has a resolution for the
                    // happened problem
                    if (connectionResult.hasResolution()) {
                        // Here we have a resolution so we start the related Activity
                        try {
                            // Start an Activity that tries to resolve the error
                            connectionResult.startResolutionForResult(
                                    MainActivity.this,
                                    CONNECTION_FAILURE_RESOLUTION_REQUEST);
                            // The previous method should throws an exception if
                            // the services cancelled the intent.
                        } catch (IntentSender.SendIntentException e) {
                            // We have to manage this error. We show a toast
                            Toast.makeText(MainActivity.this, "Resolution Intent deleted!",
                                    Toast.LENGTH_SHORT).show();
                            e.printStackTrace();
                        }
                    } else {
                        // In this case there's no resolution so we just show a message
                        Toast.makeText(MainActivity.this, "Errore con codice: " +
                                connectionResult.getErrorCode(), Toast.LENGTH_SHORT).show();
                    }
                }
        };

Poi in altri metodi privati, se faccio:

Codice: [Seleziona]
mCurrentLocation = mLocationClient.getLastLocation();

Ottengo NullPointerException. Ripeto, questo nel mio telefono con API 16 non accade.

Offline Reinhard

  • Utente junior
  • **
  • Post: 85
  • Respect: +16
    • Google+
    • rspisser
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5 Lollipop 5.1
  • Play Store ID:
    rspisser
  • Sistema operativo:
    Windows 7
Re:Servizi di localizzazione non funzionanti su 2.3.3
« Risposta #3 il: 24 Gennaio 2014, 14:51:31 CET »
0
Ciao,

non credo sia un problema di API, Play Services funziona dalla 2.3 in poi.

il getLastLocation() può essere nullo, (ad esempio, appena hai installato l'applicativo oppure l'utente ha disattivato completamente i servizi di location sullo smartphone) e quindi devi gestirlo dal applicativo.
 
Da una prima occhiata mi sembra che nel tuo applicativo non c'e' la gestione dei LocationUpdate - che hai richiesto.

/**
    * Implementation of {@link LocationListener}.
    */
   @Override
   public void onLocationChanged(Location location) {
 //   

}

sicuramente al primo onLocationChanged() hai una posizione.

Offline Elmvor

  • Utente normale
  • ***
  • Post: 166
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 14.04, Windows 8.1
Re:Servizi di localizzazione non funzionanti su 2.3.3
« Risposta #4 il: 25 Gennaio 2014, 09:36:29 CET »
0
C'è, è che mi è sembrato superfluo metterlo.

Codice: [Seleziona]
private LocationListener mLocationListener = new LocationListener() {

        @Override
        public void onLocationChanged(Location location) {
            double currentLatitude = mCurrentLocation.getLatitude();
            double currentLongitude = mCurrentLocation.getLongitude();
            if(!mLatLngList.isEmpty()) {
                if(mPath) {
                    LatLng latLngCurrentLocation = new LatLng(currentLatitude,currentLongitude);
                    float distance = getDistance(latLngCurrentLocation, mNearestLatLng);
                    float distanceKm = distance/1000;
                    mDistanceTextView.setText("Distanza dal punto più vicino: " + distanceKm + " Km");
                }
            }
            if(!mMyLatLngList.isEmpty()) {
                if(mPath) {
                    LatLng latLngCurrentLocation = new LatLng(currentLatitude,currentLongitude);
                    float distance = getDistance(latLngCurrentLocation, mNearestLatLng);
                    float distanceKm = distance/1000;
                    mDistanceTextView.setText("Distanza dal punto più vicino: " + distanceKm + " Km");
                }
            }
            if(mMergedMarkers) {
                if(mPath) {
                    LatLng latLngCurrentLocation = new LatLng(currentLatitude,currentLongitude);
                    float distance = getDistance(latLngCurrentLocation, mNearestLatLng);
                    float distanceKm = distance/1000;
                    mDistanceTextView.setText("Distanza dal punto più vicino: " + distanceKm + " Km");
                }
            }
        }
    };

Poi in realtà uno può farlo anche vuoto...

Offline Reinhard

  • Utente junior
  • **
  • Post: 85
  • Respect: +16
    • Google+
    • rspisser
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5 Lollipop 5.1
  • Play Store ID:
    rspisser
  • Sistema operativo:
    Windows 7
Re:Servizi di localizzazione non funzionanti su 2.3.3
« Risposta #5 il: 25 Gennaio 2014, 09:52:48 CET »
+1
non è per niente superfluo, direi che è fondamentale. Il onLocationChanged() viene invocato ogni volta che si ha un cambio nelle coordinate e quindi anche quando stai ottenendo un fix di una posizione. 

a dire il vero dovresti fare:

Codice (java
): [Seleziona]
public void onLocationChanged(Location location) {
             // aggiornamento di mCurrentLocatioin con la location attuale
             mCurrentLocation = location;
            // visualizza le coordinate
           mDistanceTextView.setText("location attuale: " + location.getLatitude()+"-"+location.getLongitude());
                }
            }
considera che quando parte il tuo applicativo spesso non hai una location e quindi il getLastLocation() (e per questo sul device del tuo amico ti da errore).



Offline Elmvor

  • Utente normale
  • ***
  • Post: 166
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 14.04, Windows 8.1
Re:Servizi di localizzazione non funzionanti su 2.3.3
« Risposta #6 il: 25 Gennaio 2014, 09:57:48 CET »
0
Cavoli hai ragione, faccio delle prove  ;-)

Post unito: 25 Gennaio 2014, 10:20:52 CET
Non so, non gli funziona uguale. All'inizio stampa "location non ancora disponibile", ma non si rende mai disponibile -.-
« Ultima modifica: 25 Gennaio 2014, 10:20:52 CET da Elmvor, Reason: Merged DoublePost »

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Servizi di localizzazione non funzionanti su 2.3.3
« Risposta #7 il: 25 Gennaio 2014, 10:39:50 CET »
0
Ma nelle altre app funziona?

Inviato dal mio Nexus 4 utilizzando Tapatalk

IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Elmvor

  • Utente normale
  • ***
  • Post: 166
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 14.04, Windows 8.1
Re:Servizi di localizzazione non funzionanti su 2.3.3
« Risposta #8 il: 25 Gennaio 2014, 11:35:32 CET »
0
Non odiatemi. Aveva disattivato i servizi di localizzazioni dalle impostazioni del telefono -.- Sono due giorni che cercavo di capire perché non gli funzionasse xD

Post unito: 25 Gennaio 2014, 11:35:44 CET

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Servizi di localizzazione non funzionanti su 2.3.3
« Risposta #9 il: 25 Gennaio 2014, 12:34:28 CET »
0
Non odiatemi. Aveva disattivato i servizi di localizzazioni dalle impostazioni del telefono -.- Sono due giorni che cercavo di capire perché non gli funzionasse xD

Post unito: 25 Gennaio 2014, 11:35:44 CET
beh, odiamo lui piu che te :D :D :D
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Reinhard

  • Utente junior
  • **
  • Post: 85
  • Respect: +16
    • Google+
    • rspisser
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5 Lollipop 5.1
  • Play Store ID:
    rspisser
  • Sistema operativo:
    Windows 7
Re:Servizi di localizzazione non funzionanti su 2.3.3
« Risposta #10 il: 25 Gennaio 2014, 12:51:55 CET »
0
puoi usare il LocationManager per capire se il GPS è abilitato

Codice (Java): [Seleziona]
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean enabled = service
  .isProviderEnabled(LocationManager.GPS_PROVIDER);

if (!enabled) {
  Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
  startActivity(intent);
}


Offline Elmvor

  • Utente normale
  • ***
  • Post: 166
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 14.04, Windows 8.1
Re:Servizi di localizzazione non funzionanti su 2.3.3
« Risposta #11 il: 25 Gennaio 2014, 14:22:24 CET »
0
No non era una questione di gps. Era proprio un'altra opzione tra le impostazioni del telefono che ora non ricordo come si chiama di preciso. Quella del gps lo uso già all'avvio dell'app ;)