PDA

Ver la Versión Completa : [ CONSULTA ] Problema para Obtener la localizacion actual del móvil.


SlavisWolf
03/12/16, 12:35:43
Hola gente, os comento... 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();
}
}

override
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.PRIORI TY_BALANCED_POWER_ACCURACY);//ES EL MAS EQUILIBRADO entre precision y batería.
LocationServices.FusedLocationApi.requestLocationU pdates(apiClient, locationRequest, this);
}

override
public void onConnectionSuspended(int i) {}

override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
System.out.println("onConnectionFailed");
localizacion= LocationServices.FusedLocationApi.getLastLocation( apiClient);
}
override
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.