Come timeout acquisizione del segnale GPS

La mia applicazione utilizza LocationListener per get una correzione della posizione e quindi removeUpdates() each minuto (per risparmiare la batteria). Il problema è che se un utente si sposta dentro, allora cerca perpetuo un segnale, bruciando più batterie. Mi stavo chiedendo se qualcuno conosce un metodo pubblico all'interno di Location Manager che posso usare per eliminare gli aggiornamenti se un segnale non viene acquistato entro 15 secondi. Vorrei quindi verificare la correzione di una posizione each cinque minuti finché l'utente si sposta all'aperto. Ha senso ciò? Forse c'è un metodo migliore per l'acquisizione del segnale GPS timeout? Ho esaminato i methods pubblici di Location Manager ma non riesco a trovare un modo per farlo. Grazie mille per il vostro aiuto! -Dom

  • imansible trovare com.google.firebase: firebase-core: 9.0.0
  • Support android tipo .jks keystore?
  • Configurazione del dispositivo Android per AOSP
  • Come submit email con il link per aprire l'applicazione Android
  • Pinch Zoom ListView Android
  • Registrazione di un file wav dal microfono in Android - problemi
  • Lo schema di authentication Android ntlm non è supportto
  • Intent di macchina fotografica Android: come get foto in piena dimensione?
  • Dimensione del logo di Actionbar?
  • Come posso rilevare un clic in un ascoltatore onTouch?
  • Android volley auto firmato HTTPS ancoraggio di fiducia per il path di certificazione non trovato
  • tabelle di relazione in sqlite su android
  • 3 Solutions collect form web for “Come timeout acquisizione del segnale GPS”

    Anche se la risposta di GPSmaster è accettata, voglio submit il link a una soluzione più elegante e più semplice, penso – https://gist.github.com/777790/86b405debd6e3915bfcd8885c2ee11db2b96e3df . Ho provato me stesso e ha funzionato =)

    Nel caso il collegamento non funzionasse, questo è un LocationListener personalizzato da 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 concnetworking 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); } 

    Quindi questo è ciò che ho finito per fare.

    Questo è ciò che ho aggiunto alla nota LocationListener le variables globali timertest e 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 ); } } } 

    Inizialo il timer subito prima di richiedere aggiornamenti della posizione.

     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); } 

    e un ultimo metodo all'interno dell'ascoltatore della località:

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

    Spero che questo aiuti qualcuno

    Beh, la mia soluzione a questo problema è un po 'molto semplice e non so se sia una buona pratica. Supponiamo che abbiamo un timeToQuit long denominato che determini quanti millis che desideri attendere prima di interrompere la ricerca di una posizione appena messo:

     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); 

    Naturalmente devi avere un LocationListener e il tuo LocationListener. I valori in locationManager.requestLocationUpdates sono dalla mia applicazione in modo che tu possa adattarli in modo propabile. Questo codice funziona come un fascino per me. So che sono un po 'tardi, ma non ho trovato questo approccio ovunque e propably aiuta qualcuno. Saluti

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.