Estado del GPS de Android me conduce nueces

Estoy haciendo una aplicación que utiliza el receptor GPS. La aplicación funcionará en todas las versiones desde 1.6. Tengo un icono de satélite en el que le digo a los usuarios el estado actual:

  • Si el icono está rojo – gps inhabilitado
  • Si el icono es naranja – gps está habilitado y tratando de arreglar los satélites
  • Si el icono es verde – gps está fijo y funcionando bien.

Después de leer por aquí, he encontrado que algunos eventos para onLocationChanged desencadenar en la versión 1.6 pero no más tarde, por lo que teniendo el consejo que implementó un oyente GPS. Tengo un comportamiento muy extraño ya que el estado del icono se desbarata. Por ejemplo, habilitar GPS y se pone de color naranja … después de una reparación de obtener verde .. después de unos segundos se lee después de una segunda naranja y así sucesivamente …

Aquí está el código que uso. Por favor sugiera qué cambiar

public class TrackExecutionActivity extends Activity{ protected static final long GPS_UPDATE_TIME_INTERVAL=3000; //millis protected static final float GPS_UPDATE_DISTANCE_INTERVAL=0; //meters private LocationManager mlocManager; private MyGPSListener mGpsListener; private LocationListener mlocListener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.trackexecution); imgGpsState = (ImageView)findViewById(R.id.imgGpsState); mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); mlocListener = new MyLocationListener(); mGpsListener = new MyGPSListener(); } private class MyGPSListener implements GpsStatus.Listener { public void onGpsStatusChanged(int event) { boolean isGPSFix = false; switch (event) { case GpsStatus.GPS_EVENT_SATELLITE_STATUS: if (mLastLocation != null) isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) < GPS_UPDATE_TIME_INTERVAL * 2; if (isGPSFix) { // A fix has been acquired. imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_green)); } else { // The fix has been lost. imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_orange)); } break; case GpsStatus.GPS_EVENT_FIRST_FIX: imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_green)); break; case GpsStatus.GPS_EVENT_STARTED: imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_orange)); break; case GpsStatus.GPS_EVENT_STOPPED: imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_red)); break; } } } public class MyLocationListener implements LocationListener { public void onLocationChanged(Location location) { if (location != null) { mLastLocationMillis = SystemClock.elapsedRealtime(); // do some things here mLastLocation = location; } public void onProviderDisabled(String provider) { imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_red)); } public void onProviderEnabled(String provider) { imgGpsState.setImageDrawable(ctx.getResources().getDrawable(R.drawable.gps_on_orange)); } //this doesn't trigger on Android 2.x users say public void onStatusChanged(String provider, int status, Bundle extras) { } } } @Override protected void onResume() { if(mlocManager != null) { if (mGpsListener == null) { mGpsListener = new MyGPSListener(); } if (mlocListener == null) { mlocListener = new MyLocationListener(); } mlocManager.addGpsStatusListener(mGpsListener); mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_UPDATE_TIME_INTERVAL, GPS_UPDATE_DISTANCE_INTERVAL, mlocListener); } super.onResume(); } } 

cambia esto:

 isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) < GPS_UPDATE_TIME_INTERVAL * 2; 

Estás estableciendo un booleano con valores no booleanos .. por lo tanto, el comportamiento de icono extraño durante los arreglos de gps que necesita para establecer que isGPSfix boolean en alguna parte .. para el caso de hasGPSfix o doesnothaveGPSfix ..

Podrías haber querido decir:

 if ((SystemClock.elapsedRealtime() - mLastLocationMillis) < GPS_UPDATE_TIME_INTERVAL * 2) { isGPSFIX = true; } 
  • ¿Por qué no pude obtener coordenadas GPS en un lugar remoto?
  • Android gps proveedor y gps icono
  • Obteniendo latitud y longitud utilizando gps cada 10 minutos en segundo plano android
  • ¿Es Android usando NTP para sincronizar el tiempo?
  • Enviar ubicación actual al servidor periódicamente en android
  • Android: Obtener una posición GPS rápidamente
  • ¿Existe un servicio o una aplicación de Android que sea similar al servicio de ubicación de cambios significativos de IOS?
  • Android: ¿Cómo llamo a startResolutionForResult de un servicio?
  • Obtener la ubicación / posición más precisa? (GPS / Kalman / Android)
  • LocationListener funciona en el emulador, no en el teléfono
  • Android: el proceso ha muerto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.