Cómo superar la adquisición de señales GPS

Mi aplicación utiliza el LocationListener para obtener una corrección de posición y luego removeUpdates() una vez cada minuto (para conservar la batería). El problema es que si un usuario se mueve dentro, entonces continuamente buscará una señal, quemando más batería. Me preguntaba si alguien sabe de un método público dentro del Administrador de ubicación que puedo utilizar para removeUpdates si una señal no se adquiere en 15 segundos. Entonces comprobaría para una posición fijar cada cinco minutos hasta que el usuario se mueva hacia fuera al aire libre. ¿Esto tiene sentido? Tal vez hay un mejor método para la adquisición de señal GPS de tiempo de espera? He mirado a través de los métodos públicos de la gerencia de la localización pero no puedo parecer encontrar una manera de hacerlo. ¡Muchas gracias por su ayuda! Dom

Aunque la respuesta de GPSmaster es aceptada, quiero publicar el enlace a una solución más elegante y más simple, creo – https://gist.github.com/777790/86b405debd6e3915bfcd8885c2ee11db2b96e3df . Lo he probado yo mismo y funcionó =)

En caso de que el enlace no funcione, este es un LocationListener personalizado por amay077 :

 /** * Initialize instance. * * @param locaMan the base of LocationManager, can't set null. * @param timeOutMS timeout elapsed (mili seconds) * @param timeoutListener if timeout, call onTimeouted method of this. */ public TimeoutableLocationListener(LocationManager locaMan, long timeOutMS, final TimeoutLisener timeoutListener) { this.locaMan = locaMan; timerTimeout.schedule(new TimerTask() { @Override public void run() { if (timeoutListener != null) { timeoutListener.onTimeouted(TimeoutableLocationListener.this); } stopLocationUpdateAndTimer(); } }, timeOutMS); } /*** * Location callback. * * If override on your concrete class, must call base.onLocation(). */ @Override public void onLocationChanged(Location location) { stopLocationUpdateAndTimer(); } @Override public void onProviderDisabled(String s) { } @Override public void onProviderEnabled(String s) { } @Override public void onStatusChanged(String s, int i, Bundle bundle) { } private void stopLocationUpdateAndTimer() { locaMan.removeUpdates(this); timerTimeout.cancel(); timerTimeout.purge(); timerTimeout = null; } public interface TimeoutLisener { void onTimeouted(LocationListener sender); } 

Así que esto es lo que terminé haciendo.

Esto es lo que he añadido a la etiqueta LocationListener las variables globales timertest y loccounter:

 public class MyLocationListener implements LocationListener { public void onStart() { if (timertest==false) { timertest=true; serviceHandler = new Handler(); serviceHandler.postDelayed( new timer(),1000L ); } } class timer implements Runnable { public void run() { ++loccounter; if (runtest==true && loccounter>8) { dt=200; runtest=false; stoplistening(); } else serviceHandler.postDelayed( this, 1000L ); } } } 

Inicie el temporizador justo antes de solicitar las actualizaciones de la ubicación.

 public void locupdate(int minTime, float minDistance) { mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); mlocListener = new MyLocationListener(); if (mlocListener != null && mlocManager != null) { mlocManager.removeUpdates(mlocListener); } loccounter=0; ((MyLocationListener) mlocListener).onStart(); runtest=true; mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, mlocListener); } 

Y un último método dentro del oyente de localización:

  public void stoplistening() { mlocManager.removeUpdates(mlocListener); loccounter=0; } 

Espero que esto ayude a alguien

Bueno, mi solución a este problema es algo muy simple y no sé si es una buena práctica. Supongamos que tenemos un nombre de long llamado timeToQuit que determina cuántos timeToQuit que desea esperar antes de abortar la búsqueda de una posición acaba de poner:

 locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 0, locationListener); Handler handler = new Handler(); // android.os.Handler Runnable runnable = new Runnable() { @Override public void run() { locationManager.removeUpdates(locationListener); } }; handler.postDelayed(runnable, timeToQuit); 

Por supuesto usted tiene que tener un LocationListener y su propio LocationListener. Los valores en locationManager.requestLocationUpdates son de mi aplicación, por lo que conviene adaptarlos. Este código funciona como un encanto para mí. Sé que estoy un poco tarde, pero no pude encontrar este enfoque en ninguna parte y propably ayuda a alguien. Aclamaciones

  • Android Location Manager, Obtener ubicación GPS, si no hay GPS, luego llegar a la ubicación del proveedor de red
  • Convertir latitud y longitud en esri arcGIS MapPoint
  • ¿Se puede ampliar el tamaño de la superposición con el mapa de google en android?
  • A-GPS, restablecimiento de GPS y sendExtraCommand
  • Fused Location API da Lat Inaccurate, Largo cuando traza en el mapa es un poco lejos de la ruta de la carretera, incluso para el valor de baja exactitud
  • Android: cómo arreglar gps con simulacros (falso) de coordenadas?
  • Comprobar WiFi y GPS isConnected o no en Android?
  • Cómo calcular el total de millas Viajar de la ubicación actual a otra ubicación ¿Oyente de ubicación?
  • Cómo recuperar la ubicación GPS a través de SMS
  • La aplicación comienza a buscar el GPS justo al iniciar la aplicación, no cuando es necesario
  • MBTilesRasterDataSource no se encuentra en nutiteq SDK?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.