а. Обычно мы должны регистрироваться как для GPS, так и для сетевого провайдера при запросе обновлений, это решает проблему прямой видимости, когда мы автоматически возвращаемся к сетевым значениям.
б. Если GPS выключен, вы можете проверить это из кода с помощью isProviderEnabled (), если нет, то единственный вариант - использовать поставщика сети.
с. Еще лучше иметь LocationListener в качестве отдельного класса, а в onLocationChanged хранить полученное местоположение, которое должно быть доступно в вашем приложении.
Для регистрации используйте android.location.LocationListener.requestLocationUpdates