2011-05-31 74 views
2

我想观看系统设置并在其值发生变化时收到通知。光标类有一个setNotificationUri方法听起来不错,但它不能正常工作和编码,也觉得很奇怪......那是我所做的:监视Android系统设置值

// 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系统设置?

感谢您的任何提示!

回答

4

下面是一些示例代码:

ContentResolver contentResolver = getContentResolver(); 
Uri setting = Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION); 
ContentObserver observer = new ContentObserver(new Handler()) { 
    @Override 
    public void onChange(boolean selfChange) { 
     super.onChange(selfChange); 
    } 

    @Override 
    public boolean deliverSelfNotifications() { 
     return true; 
    } 
}; 
contentResolver.registerContentObserver(setting, false, observer); 
contentResolver.unregisterContentObserver(observer); 

退房任何这些方法的详细信息的文档。