ContentObserver на браузъра не се извиква дори с помощта на различни URI адреси

Моят ContentObserver за наблюдение на хронологията в браузъра не се извиква. Не разбирам защо не е така. Не правя нищо различно или странно, следвам точно спецификациите на API, но без резултат! По-долу е моят код:

В моята услуга:

public class MonitorService extends Service {
    //some global variables declared here
    private ContentObserver historyObserver, searchObserver, chromeObserver;

    public void onCreate() {
        super.onCreate();
        isRunning = false;
        this.preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

        //this.historyObserver = new HistoryObserver();
        this.historyObserver = new HistoryObserver(new Handler());
        this.searchObserver = new HistoryObserver(new Handler());
        this.chromeObserver = new HistoryObserver(new Handler());

        getApplicationContext().getContentResolver().registerContentObserver(Uri.parse("content://com.android.chrome.browser/history"), false, this.chromeObserver);
        getApplicationContext().getContentResolver().registerContentObserver(android.provider.Browser.BOOKMARKS_URI, false, this.historyObserver);
        getApplicationContext().getContentResolver().registerContentObserver(android.provider.Browser.SEARCHES_URI, false, this.searchObserver);
    }
//Other required methods in class
}//end of class

Тогава в моя клас HistoryObserver имаме:

public class HistoryObserver extends ContentObserver {

    public final String TAG = "HistoryObserver";

    public HistoryObserver(Handler handler) {
        super(handler);
        Log.d(TAG, "Creating new HistoryObserver");
    }

    public HistoryObserver() {
        super(null);
        Log.d(TAG, "Creating a new HistoryObserver without a Handler");
    }

    @Override
    public boolean deliverSelfNotifications() {
        Log.d(TAG, "delivering self notifications");
        return true;
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        Log.d(TAG, "onChange without uri: " + selfChange);
        //onChange(selfChange, null);
    }

    public void onChange(boolean selfChange, Uri uri) {
        super.onChange(selfChange, uri);
        Log.d(TAG, "onChange: " + selfChange + "\t " + uri.toString());
    }
}

Както казах, няма нищо специално или уникално в тази реализация. И все пак, когато отида на нов уебсайт или търся нещо в Chrome, методът onChange никога не се задейства.


person lilott8    schedule 26.08.2014    source източник
comment
Услугата е създадена правилно в дейност. Получавам регистрационни файлове от създаването на обекта HistoryObserver, така че знам, че услугата стартира правилно и обектите са инициализирани правилно.   -  person lilott8    schedule 27.08.2014
comment
По същество имам същата реализация като тази: stackoverflow.com/questions/18987919/, но моят не работи :(   -  person lilott8    schedule 27.08.2014


Отговори (1)


Разбрах проблема. Доставчикът на съдържание /history не е наблюдаем. Наблюдаваните идват чрез /bookmark uri. След като открих това, нещата потръгнаха много бързо и много добре.

person lilott8    schedule 27.08.2014
comment
Работи ли все още ContentObserver за Chrome с текущата официална стабилна версия на Chrome 39.0.2171.59? Сравних версия 33 с текущата и в текущата, наблюдателят на отметките/историята вече не се задейства... - person arne.jans; 19.11.2014
comment
Не знам. Проектът беше ограничен проект -- използван за една седмица, след което беше спрян. Така че не мога да отговоря вместо вас. - person lilott8; 19.11.2014
comment
С текущата версия на Chrome, той трябва отново да предостави пътя на доставчика с .../history. Вижте този проблем: code.google.com/p/chromium/issues/ detail?id=433804 - person arne.jans; 20.11.2014