Crear Servicio GPS en android

652 views
Skip to first unread message

Deimer Villa

unread,
May 20, 2015, 4:40:06 PM5/20/15
to desarrollad...@googlegroups.com
Hola amigos del foro, mi nombre es Deimer Villa y soy nuevo en la pagina, un placer saludarlos y conocerlos a todos... 
Quería saber si alguien de la comunidad que me pueda ayudar con un problema que tengo en una app que estoy desarrollado para un proyecto de mi oficina, ya llevo alrededor de una semana peleando con esto y aun no consigo hacerlo. 
Mi idea es la de crear un servicio que corra por debajo para las funciones de GPS del celular, tal cual como lo hace un servicio de música, esto lo hago ya que cuando la tableta es bloqueada al momento de pedir el posicionamiento actual del usuario, este me lanza un error que cierra la app... He averiguado en Google y al parecer la solución es la de crear un servicio que controle las peticiones de las coordenadas del GPS, adjunto a la pregunta esta la clase donde tengo creado el servicio de location pero no se que mas le falta para que sea del todo un servicio... Sin ser mas, espero que alguien pueda ayudarme, y aun cuando no haya alguien estaré atento a participar activamente en el foro y ayudar a los demás si es algo al alcance de mis manos... Muchas gracias de antemano y que Dios los bendiga...
ServicioGPS.java

gilbe...@gmail.com

unread,
May 20, 2015, 5:21:44 PM5/20/15
to desarrollad...@googlegroups.com
No has pensado en usar GoogleApiClient lo he usado para obtener la Geolocalizcion y es bastante buena. la Api.

Deimer Villa

unread,
May 20, 2015, 5:26:29 PM5/20/15
to desarrollad...@googlegroups.com
Gracias por responder gilbert89, tu disculpa que te moleste, pero podrias darme mas informacion de esa api? O es una libreria?

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/bbe405fa-e702-4fb6-a7b5-0f6e7bdeca39%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Ingeniero de Sistemas, Deimer Villa Pedraza

gilbe...@gmail.com

unread,
May 20, 2015, 6:03:59 PM5/20/15
to desarrollad...@googlegroups.com
Es una Api de google mira yo la implemento en una clase de prueba que tenia por ahí. y luego lo ves
o miralo en este tutorial muy completo.
http://blog.teamtreehouse.com/beginners-guide-location-android

public class MyLocation implements LocationListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener
{

public static final long UPDATE_INTERVAL_IN_MILLISECONDS = 10 * 1000;
public static final long FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS = 5 * 1000;

protected LocationRequest mLocationRequest;
protected Location mCurrentLocation;

private int serverResponseCode = 0;
private boolean network_enabled = false;
private boolean gps_enabled = false;
private boolean propagatingToggleState = false;
private LocationManager lm;
private String latitud, logintud;
private double longi;
private double lati;

Context ctx;
private static final int RC_SIGN_IN = 0;
private GoogleApiClient mGoogleApiClient;
ThreadCompleteListener listener;


public MyLocation(Context ctx) {

this.ctx=ctx;

lm = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE);
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

buildGoogleApiClient();
if (!getGPSenable()) {
checkGps();
}
}


public boolean getGPSenable(){
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
return gps_enabled;
}

// pide la activacion del GPS si esta desactivada
public void checkGps() {
com.gc.materialdesign.widgets.Dialog dialog = new com.gc.materialdesign.widgets.Dialog(ctx, "El GPS esta desactviado", "Activar para poder reportar obstaculos.");

dialog.setOnAcceptButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ctx.startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0);
}
});
dialog.setOnCancelButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

}
});
dialog.show();
}


public GoogleApiClient getApi(){
return mGoogleApiClient;
}

@Override
public void onConnected(Bundle bundle) {
if (mCurrentLocation == null) {
mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, MyLocation.this);
updateLocation();
}

@Override
public void onConnectionSuspended(int i) {
mGoogleApiClient.connect();
}


@Override
public void onConnectionFailed(ConnectionResult connectionResult) {



}
private void updateLocation() {
if (mCurrentLocation != null) {
lati = mCurrentLocation.getLatitude();
longi = mCurrentLocation.getLongitude();
setLati(lati);
setLongi(longi);
notifyListeners(lati,longi);
}
}

protected synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(ctx)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
createLocationRequest();
}

//Este es el que inicia se llama para el primer llamado de localizacion
public void startLocationUpdates() {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
}


// cuando la localizacion cambia este metodo es llamado y se actualiza
@Override
public void onLocationChanged(Location location) {
mCurrentLocation = location;/**/
}

// se crea el locationRequest que lo que configura es la velocidad a la que se piden actualizaciones del
// gps
protected void createLocationRequest() {
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setNumUpdates(5);
}

// los tipicos getters and setters...en este caso de la Latitud y Longitud

public double getLongi() {
return longi;
}

public double getLati() {
return lati;
}

public void setLongi(double longi) {
this.longi = longi;
}

public void setLati(double lati) {
this.lati = lati;
}

// ya conectado se pide la actualizacion de datos
public void onResume() {
if (mGoogleApiClient.isConnected()) {
startLocationUpdates();

}
}
// se inicia la solicitud de localizacion
public void onStart() {
if (mGoogleApiClient != null && gps_enabled)
mGoogleApiClient.connect();
}
// se detiene el gps
public void onStop() {
if (mGoogleApiClient.isConnected() && gps_enabled)
mGoogleApiClient.disconnect();
}

private final void notifyListeners(double Latitud,double Longitud) {
if(listener!=null) {
listener.notifyOfThreadComplete(Latitud, Longitud);
}
}
public final void addListener(final ThreadCompleteListener listener) {
this.listener=listener;
}
}

El miércoles, 20 de mayo de 2015, 16:26:29 (UTC-5), Deimer Villa escribió:
Gracias por responder gilbert89, tu disculpa que te moleste, pero podrias darme mas informacion de esa api? O es una libreria?
El 20 de mayo de 2015, 16:21, <gilbe...@gmail.com> escribió:
No has pensado en usar GoogleApiClient lo he usado para obtener la Geolocalizcion y es bastante buena. la Api.

El miércoles, 20 de mayo de 2015, 15:40:06 (UTC-5), Deimer Villa escribió:
Hola amigos del foro, mi nombre es Deimer Villa y soy nuevo en la pagina, un placer saludarlos y conocerlos a todos... 
Quería saber si alguien de la comunidad que me pueda ayudar con un problema que tengo en una app que estoy desarrollado para un proyecto de mi oficina, ya llevo alrededor de una semana peleando con esto y aun no consigo hacerlo. 
Mi idea es la de crear un servicio que corra por debajo para las funciones de GPS del celular, tal cual como lo hace un servicio de música, esto lo hago ya que cuando la tableta es bloqueada al momento de pedir el posicionamiento actual del usuario, este me lanza un error que cierra la app... He averiguado en Google y al parecer la solución es la de crear un servicio que controle las peticiones de las coordenadas del GPS, adjunto a la pregunta esta la clase donde tengo creado el servicio de location pero no se que mas le falta para que sea del todo un servicio... Sin ser mas, espero que alguien pueda ayudarme, y aun cuando no haya alguien estaré atento a participar activamente en el foro y ayudar a los demás si es algo al alcance de mis manos... Muchas gracias de antemano y que Dios los bendiga...

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/bbe405fa-e702-4fb6-a7b5-0f6e7bdeca39%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Deimer Villa

unread,
May 21, 2015, 3:18:32 PM5/21/15
to desarrollad...@googlegroups.com
Y se puede trabajar en eclipse?? Es que soy nuevo en esto de la programación y creación de aplicaciones en android y no se que tan diferente pueda ser de como se implementa en android studio...

Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/bbe405fa-e702-4fb6-a7b5-0f6e7bdeca39%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Ingeniero de Sistemas, Deimer Villa Pedraza

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

Carlos Contreras

unread,
May 21, 2015, 7:58:58 PM5/21/15
to desarrollad...@googlegroups.com
Hola Deimer,
Como bien dice el compañero, yo también utilizo la api de Google para obtener coordenadas. Y sí, sirve para eclipse también, ya que yo la estoy usando para un proyecto con eclipse.
En mi caso, yo lanzo un IntetService, cada vez que actualizo la posición. Ya que según tengo entendido, no se puede crear un servicio en el que se use el GPS.

Roger Isaac Navarro Perez

unread,
May 22, 2015, 11:06:03 PM5/22/15
to desarrollad...@googlegroups.com
Podrias complementar con opencellid esto te ayuda cuando no se cuenta con gps y no tienes cobertura de datos por ejemplo y no puedes hacer la consulta en google.

http://opencellid.org/

http://wiki.opencellid.org/wiki/Android_library

saludos.


El 21 de mayo de 2015, 18:58, Carlos Contreras <cmjca...@gmail.com> escribió:
Hola Deimer,
Como bien dice el compañero, yo también utilizo la api de Google para obtener coordenadas. Y sí, sirve para eclipse también, ya que yo la estoy usando para un proyecto con eclipse.
En mi caso, yo lanzo un IntetService, cada vez que actualizo la posición.
El miércoles, 20 de mayo de 2015, 22:40:06 (UTC+2), Deimer Villa escribió:
Hola amigos del foro, mi nombre es Deimer Villa y soy nuevo en la pagina, un placer saludarlos y conocerlos a todos... 
Quería saber si alguien de la comunidad que me pueda ayudar con un problema que tengo en una app que estoy desarrollado para un proyecto de mi oficina, ya llevo alrededor de una semana peleando con esto y aun no consigo hacerlo. 
Mi idea es la de crear un servicio que corra por debajo para las funciones de GPS del celular, tal cual como lo hace un servicio de música, esto lo hago ya que cuando la tableta es bloqueada al momento de pedir el posicionamiento actual del usuario, este me lanza un error que cierra la app... He averiguado en Google y al parecer la solución es la de crear un servicio que controle las peticiones de las coordenadas del GPS, adjunto a la pregunta esta la clase donde tengo creado el servicio de location pero no se que mas le falta para que sea del todo un servicio... Sin ser mas, espero que alguien pueda ayudarme, y aun cuando no haya alguien estaré atento a participar activamente en el foro y ayudar a los demás si es algo al alcance de mis manos... Muchas gracias de antemano y que Dios los bendiga...

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Reply all
Reply to author
Forward
0 new messages