监控Android系统设置数值

8
我希望能够观察系统设置并在其值改变时得到通知。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);

}
}

显然,监听器从未被调用,我在logcat中找不到具有指定TEST标签的条目 ): (为了测试,我手动将亮度设置从手动更改为自动,在Android设置菜单中)。我做错了什么?有没有其他更好的方法来监视Android系统设置?
感谢任何提示!
2个回答

12

这是一些示例代码:

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

以下是如何实现,非常有效:如何为通话记录实现ContentObserver。请注意,在用户更改某些设置时,某些设置仅在用户按下系统首选项屏幕中的返回键时才会被写入/真正更改!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接