Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 即使使用不同的URI';s_Java_Android_Google Chrome_Browser History_Observers - Fatal编程技术网

Java 即使使用不同的URI';s

Java 即使使用不同的URI';s,java,android,google-chrome,browser-history,observers,Java,Android,Google Chrome,Browser History,Observers,未调用用于在浏览器中观察历史记录的我的ContentObserver。我不明白为什么不是。我没有做任何不同或奇怪的事情,我完全遵循API规范,但毫无用处!下面是我的代码: 为我服务: public class MonitorService extends Service { //some global variables declared here private ContentObserver historyObserver, searchObserver, chromeObs

未调用用于在浏览器中观察历史记录的我的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
在我的历史观察者课程中,我们有:

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方法从未被激活。

我发现了问题所在。/history内容提供程序不是可观察的。可观察的对象通过/bookmarkuri来实现。一旦我发现了这一点,事情就进展得非常快,非常顺利。

该服务是在活动中正确创建的。我从HistoryObserver对象的创建中获取日志,因此我知道服务正在正确启动,并且对象已正确初始化。我的实现基本上与此相同,但我的实现不起作用:(Chrome的ContentObserver在当前官方稳定的Chrome版本39.0.2171.59中是否仍然适用于您?我将版本33与当前版本进行了比较,在当前版本中,书签/历史观察者不再被触发……我不知道。该项目是一个有限的项目——使用了一周,然后关闭。因此我无法为您回答这个问题。)。对于当前版本的Chrome,它应再次为提供程序路径提供“../history”。请参阅此问题: