• Hola, con los nuevos cambios del sitio he puesto diferentes tipos de publicidad que podrian resultar algo molestas. Sin embargo, luego de registrarte e interactuar un poco con la pagina, van a ser reemplazados por otros mas sutiles y pequeños! * A mi tampoco me gusta la publicidad, pero es una de las piezas para que el sitio esté disponible. Si bloqueas la publicidad, probá desactivarla unos dias.
    Gracias

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

SlavisWolf

Nuevo miembro
#1
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:

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.
 
Última edición por un moderador: