ContentObserver не уведомляет об указанном выше API 17

У меня есть ContentObserver в моем приложении, чтобы проверить, когда контакт редактируется, я реализовал его с помощью следующего кода, он работает на устройствах с более низким API Android, чем 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 ответ

Решение

Я считаю, что проблема заключается в том, что более новые уровни API используют перегрузку onChange() метод, который принимает два параметра: boolean и Uri, Попробуйте изменить свой код следующим образом:

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() не нужны, так как переопределенные методы пусты в суперклассе.

Другие вопросы по тегам