Java 即使使用不同的URI';s
未调用用于在浏览器中观察历史记录的我的ContentObserver。我不明白为什么不是。我没有做任何不同或奇怪的事情,我完全遵循API规范,但毫无用处!下面是我的代码: 为我服务: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
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”。请参阅此问题: