Chcę oglądać ustawienie systemowe i otrzymywać powiadomienia, gdy zmieni się jego wartość. Klasa Cursor ma setNotificationUri, która brzmiała ładnie, ale nie działa, a kodowanie też wydaje się dziwne... Tak właśnie zrobiłem:

    // 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);

Słuchacz:

public class MyObserver implements SyncStatusObserver {

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

}
}

Cóż, oczywiście słuchacz nigdy nie zostaje wywołany, nie mogę znaleźć wpisu z określonym tagiem TEST w logcat ): (Do testów ręcznie zmieniłem ustawienie jasności z ręcznego na automatyczne w menu ustawień Androida). Jakieś wskazówki, co robię źle? Jakiś inny, lepszy sposób monitorowania ustawień systemu Android?

Dzięki za każdą wskazówkę!

7
stefan.at.wpf 31 maj 2011, 20:43

2 odpowiedzi

Najlepsza odpowiedź

Oto przykładowy kod:

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);

Zapoznaj się z dokumentacją dowolnej z tych metod, aby uzyskać więcej informacji.

11
Sam 9 marzec 2019, 23:42