Setting time interval to check for fix is not a good choice.. i noticed that onLocationChanged is not called if you are not moving.. what is understandable since location is not changing :)
Better way would be for example:
- check interval to last location received (in gpsStatusChanged)
- if that interval is more than 15s set variable: long_interval = true
- remove the location listener and add it again, usually then you get updated position
if location really is available, if not - you probably lost location
- in onLocationChanged you just set long_interval to false..