public void onGpsStatusChanged(int state) { GpsStatus gpsStatus = locationManager.getGpsStatus(null); if (state == GpsStatus.GPS_EVENT_STOPPED) { hasFix = false; numSatellites = 0; updateSolution(LocationProvider.OUT_OF_SERVICE); } else if ((System.currentTimeMillis() - lastFixTimestamp) > 3000) { invalidateFix(); } if (state == GpsStatus.GPS_EVENT_STARTED) { // FIXME do what's needed updateSolution(LocationProvider.AVAILABLE); } gpsState = state; if (state == GpsStatus.GPS_EVENT_SATELLITE_STATUS && gpsStatus != null) { for (int j = 0; j < 36; j++) { /** Resetting all the satellites to non locked */ if ((satellites[j] != null)) { satellites[j].isLocked(false); } } Iterable<GpsSatellite> andSatellites = gpsStatus.getSatellites(); Iterator<GpsSatellite> sat = andSatellites.iterator(); int i = 0; while (sat.hasNext()) { GpsSatellite satellite = sat.next(); if (satellites[i] == null) { satellites[i] = new Satellite(); } if (i < 36) { satellites[i].isLocked(satellite.usedInFix()); satellites[i].id = i; satellites[i].azimut = satellite.getAzimuth(); satellites[i].elev = satellite.getElevation(); satellites[i].snr = (int) satellite.getSnr(); if (satellite.usedInFix()) { i++; } } } numSatellites = i; if (numSatellites > 0) { receiverList.receiveSatellites(satellites); } } // updateSolution(state); }