SlavisWolf

Problema para Obtener la localización actual del móvil.

Puntuar este tema

1 post en este tema

 

Hola gente, os comento...

tengo un problema que creo que para vosotros no sera gran cosa(por los hilos que he visto).

quiero obtener la localización actual de un telefono desde 2 actividades distintas..., pues bien quise hacer unaclase que me gestionara todo lo relacionado con la Localizacion y el gps.

Os la enseño:

Cita


import android.location.Location;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;


import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import android.support.v7.app.AppCompatActivity;


//esta clase se iniciara en las notas y nos permitira tener la localizacion más precisa posible.
public class ObtenedorDeLocalizacionActual implements   GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {

    private static  Location localizacion;
    private GoogleApiClient apiClient;

    public ObtenedorDeLocalizacionActual(AppCompatActivity c) {

        System.out.println("Constructor");
        if (apiClient == null) {
            apiClient = new GoogleApiClient.Builder(c)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(LocationServices.API)
                    .build();
        }
    }

    [MENTION=42589]override[/MENTION]
    public void onConnected(@Nullable Bundle bundle) {
        // ACTUALIZAR POSICION
        System.out.println("onConnected");
        LocationRequest locationRequest = new LocationRequest();
        locationRequest.setInterval(2000);
        locationRequest.setFastestInterval(1000);
        locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);//ES EL MAS EQUILIBRADO entre precision y batería.
        LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, locationRequest, this);
    }

    [MENTION=42589]override[/MENTION]
    public void onConnectionSuspended(int i) {}

    [MENTION=42589]override[/MENTION]
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
        System.out.println("onConnectionFailed");
        localizacion= LocationServices.FusedLocationApi.getLastLocation(apiClient);
    }
    [MENTION=42589]override[/MENTION]
    public void onLocationChanged(Location location) {
        System.out.println("onLocationChanged");
        localizacion=location;
    }
    public Location getLocalizacion() {
        return localizacion;
    }
}

 

Como podéis ver tengo varios chivatos para ver por donde va pasando, pues bien, esta clase la inicio en el OnCreate de una activity, y solo salta el chivato del constructor, no entra en ninguno de los métodos de los listener, un amigo mio, me ha dicho que a e el le ha funcionado poniendo los listener en las activities directamente, yo en principio vi más limpio hacer la obtención de la localización en una clase, y no ensuciar mas el codigo de la actividad...
Este codigo lo he probado tanto en el emulador de android, como en un movil, siempre, la localización siempre es null, porq nunca entra ni en el on conected ni en el failed ni en ningún metodo.

Entonces me ha entrado la duda de si estos listener solo se pueden usar en activities o es que tengo algo del código mal?

Saludos y gracias de antemano.

Editado por SlavisWolf

Compartir este post


Enlace al post
Compartir en otros sitios

Registra una cuenta o conéctate para comentar

Debes ser un miembro de la comunidad para dejar un comentario

Crear una cuenta

Regístrate en nuestra comunidad. ¡Es fácil!


Registrar una cuenta nueva

Iniciar Sesión

¿Ya tienes cuenta? Conéctate aquí.


Iniciar Sesión