I need to receive location changes both from Network and GPS providers.
If GPS provider not avaliable or has not location (bad sattelite visibility) I would receive
Just don't give any criteria, and try to get the best provider:
LocationManager mgr = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String best = mgr.getBestProvider(criteria, true);
//since you are using true as the second parameter, you will only get the best of providers which are enabled.
Location location = mgr.getLastKnownLocation(best);