private void updateSolution(int state) { logger.info("Update Solution"); currentState = state; if ((System.currentTimeMillis() - lastFixTimestamp) > 3000) { hasFix = false; } // locationUpdated(locationManager, locationManager.getLastKnownLocation(provider), true); if (state == LocationProvider.OUT_OF_SERVICE) { if (receiverList != null) { receiverList.receiveStatus(LocationMsgReceiver.STATUS_OFF, 0); receiverList.receiveMessage( Locale.get("androidlocationinput.ProviderStopped") /*provider stopped*/); } // some devices, e.g. Samsung Galaxy Note will claim LocationProvider.AVAILABLE // even when there's no fix, so use a timestamp to detect } else if (state == LocationProvider.TEMPORARILY_UNAVAILABLE || !hasFix) { if (receiverList != null) { receiverList.receiveStatus(LocationMsgReceiver.STATUS_NOFIX, numSatellites); } } else if (state == LocationProvider.AVAILABLE || hasFix) { if (receiverList != null) { receiverList.receiveStatus(LocationMsgReceiver.STATUS_ON, numSatellites); } } }