ContentObserver不会在上面的API 17上通知

时间:2014-04-12 00:15:49

标签: android contentobserver

我的应用程序上有一个ContentObserver来检查联系人的编辑时间,我用以下代码实现了它,它适用于android API低于17但不高于17的设备。

observer = new MyContentObserver();
getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, observer);


private class MyContentObserver extends ContentObserver
{
    public MyContentObserver()
    {
        super(null);
    }

    @Override
    public void onChange(boolean selfChange)
    {
        super.onChange(selfChange);
        cache.clearCache();
    }
}

1 个答案:

答案 0 :(得分:1)

我认为问题在于较新的API级别会使用onChange()方法的重载,该方法需要两个参数:booleanUri。尝试更改代码,如下所示:

private class MyContentObserver extends ContentObserver
{ 
    public MyContentObserver() 
    { 
        super(null); 
    } 

    @Override 
    public void onChange(boolean selfChange)
    {  
        onChange(selfChange, null); 
    }

    @Override
    public void onChange(boolean selfChange, Uri uri)
    {
        cache.clearCache();
    } 
}

您可以直接在两种方法中调用cache.clearCache();,但这种方式将允许在一个地方进行任何可能的未来修改。此外,对super.onChange()的调用是不必要的,因为重写的方法在超类中是空的。