Android: определить, что пользователь открывает строку состояния - PullRequest
5 голосов
/ 07 октября 2011

Я пишу приложение, которое использует GPS для служб локализации. Когда пользователь пытается использовать приложение с отключенным GPS, появляется диалоговое окно. Теперь пользователь может свернуть приложение и изменить настройки GPS. Когда он снова открывает приложение, оно обнаруживает в onResume (), что настройки были изменены, и закрывает диалоговое окно. Это прекрасно работает, но у пользователя есть второй способ включить GPS: строка состояния. Когда строка состояния открывается и закрывается, не вызывается ни onResume (), ни onWindowFocusChanged (), поэтому я не могу определить, когда пользователь включил GPS.

Есть ли способ обнаружить открытие строки состояния?

Я мог бы сделать это через LocationListener, но я бы хотел сделать это так, как я написал выше.

Заранее спасибо!


Я нашел помощь в IRC android-dev. Теперь я использую Observer, чтобы заметить изменения настроек, например здесь . Итак, я обнаруживаю все изменения настроек, даже если они сделаны через панель уведомлений, не запрашивая обновления из LocationManager. Спасибо за вашу помощь!

Ответы [ 3 ]

1 голос
/ 31 мая 2012

Для прослушивания GPS, который пользователь включил, используя строку состояния, вы можете настроить прослушиватель для изменений через менеджер местоположений:

private class DisabledGPSListener implements LocationListener{

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        locationManager.removeUpdates(this);
        locationManager.addGpsStatusListener(gpsStatusListener);
    }

установить этот прослушиватель внутри onCreate ()

if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
    locationManager.addGpsStatusListener(gpsStatusListener);
}else{
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,0, new DisabledGPSListener());
}

где gpsStatusListener является экземпляром:

    private class GPSStatuslistener implements GpsStatus.Listener {

    @Override
    public void onGpsStatusChanged(int event) {
        switch (event) {
        case GpsStatus.GPS_EVENT_STARTED:
            Log.d(TAG, "ongpsstatus changed started");
            //TODO: your code that get location updates, e.g. set active location listener 
            break;
        case GpsStatus.GPS_EVENT_STOPPED:
            Log.d(TAG, "ongpsstatus changed stopped");
            createGpsDisabledAlert();
        }
    }
0 голосов
/ 07 октября 2011

Это напрямую не решает вашу проблему, но вам может быть проще открыть настройки для пользователя:

startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0);
0 голосов
/ 07 октября 2011

Вы ищете LocationManager.addGpsStatusListener?

...