Мониторинг значений системных настроек Android - PullRequest
6 голосов
/ 31 мая 2011

Я хочу посмотреть настройки системы и получать уведомления при изменении ее значения.Класс Cursor имеет метод setNotificationUri , который звучит хорошо, но он не работает, и его кодирование также кажется странным ... Вот что я сделал:

    // Create a content resolver and add a listener
    ContentResolver resolver = getContentResolver();
    resolver.addStatusChangeListener(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS | ContentResolver.SYNC_OBSERVER_TYPE_PENDING | ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE, new MyObserver());

    // I somehow need to get an instance of Cursor to use setNotificationUri in the next step...
    Cursor cursor2 = resolver.query(Settings.System.CONTENT_URI, null, null, null, null);

    // For testing purposes monitor all system settings
    cursor2.setNotificationUri(resolver, Settings.System.CONTENT_URI);

Слушатель:

public class MyObserver implements SyncStatusObserver {

public void onStatusChanged(int which) {
    Log.d("TEST", "status changed, which = " + which);

}
}

Ну, очевидно, что слушатель никогда не вызывается, я не могу найти запись с указанным тегом TEST в logcat): (Для тестирования я вручную изменил настройку яркости с ручной на автоматическую в настройках Androidменю).Любой намек, что я делаю не так?Любой другой, лучший способ контролировать системные настройки Android?

Спасибо за любую подсказку!

Ответы [ 2 ]

10 голосов
/ 22 марта 2015

Вот пример кода:

ContentResolver contentResolver = getContentResolver();
Uri setting = Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION);

// Make a listener
ContentObserver observer = new ContentObserver(new Handler()) {
    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
    }

    @Override
    public boolean deliverSelfNotifications() {
        return true;
    }
};

// Start listening
contentResolver.registerContentObserver(setting, false, observer);

// Stop listening
contentResolver.unregisterContentObserver(observer);

Более подробную информацию смотрите в документации по любому из этих методов.

6 голосов
/ 31 мая 2011

вот как это можно сделать, прекрасно работает: Как реализовать ContentObserver для журналов вызовов .Обратите внимание, что некоторые настройки впервые записываются / действительно изменяются, когда пользователь нажимает клавишу «Назад» на экране настроек системы, где он что-то изменил!

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