Мониторинг состояния GPS (не может проверить его, если пользователь отключил GPS с помощью панели уведомлений) - PullRequest
3 голосов
/ 18 октября 2011

В моем приложении мне нужно контролировать состояние GPS , приложение должно работать только с включенным GPS, и если пользователь выключает GPS, я показываю настройки «Местоположение и безопасность».Я реализовал пользовательский класс для мониторинга GPS:

public class GPSManager {
    LocationManager mLocationManager;
    StatusListener statusListener;


    /**
     * @param Context context - context to get LocationManager service
     * @param IGpsStatusClient client -component, which wants to receive GPS status update
     */
    public GPSManager(Context context, IGpsStatusClient client) {
        mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        statusListener=new StatusListener(client);
    }

    public boolean isGpsEnabled(){
        return mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    }

    public void registerUpdates() {
        mLocationManager.addGpsStatusListener(statusListener);
    }

    public void unregisterUpdates() {
       mLocationManager.removeGpsStatusListener(statusListener);
    }

    class StatusListener implements GpsStatus.Listener {

        IGpsStatusClient client;

        public StatusListener(IGpsStatusClient client){
            this.client=client;
        }

        public void onGpsStatusChanged(int event) {
            if(event==GpsStatus.GPS_EVENT_STOPPED){
                client.promptGpsSettings();
            }
        }
    }

}

Клиент здесь является экземпляром класса Fragment.Он реализует интерфейс IGpsStatusClient с одним методом (в котором я показываю настройки местоположения).Я регистрирую обновления в onResume() и отменяю регистрацию в onPause() Но это не имеет никакого эффекта.Когда я раскрываю панель уведомлений, выключаю GPS и возвращаюсь в приложение, подсказка не отображается.Как я понимаю, уведомление о состоянии GPS не похоже на «ожидающее намерение», которое на некоторое время зависает, так что все приемники могут его обработать.Какие есть варианты?Как я понимаю, GPS может быть отключен только пользователем, а НЕ, когда моя активность видна. Итак, я должен проверять состояние GPS только в событиях жизненного цикла активности (или фрагмента).Но когда панель уведомлений расширена, я не получаю вызовы onResume () или onPause () (но тогда почему я не получаю уведомления о состоянии GPS?) Я думал о Сервисе, но думаю, что это дорого для моей проблемы.Любая помощь?Благодарю.

1 Ответ

4 голосов
/ 18 октября 2011

Вы пытались реализовать LocationListener и использовать методы onProviderDisabled / onProviderEnabled?

Здесь - ссылка на страницу разработчика Android о LocationListener

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...