【发布时间】:2014-08-26 22:13:03
【问题描述】:
我的用于观察浏览器历史记录的 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 方法永远不会被触发。
【问题讨论】:
-
服务在活动中正确创建。我从 HistoryObserver 对象的创建中获取日志,因此我知道服务正在正确启动并且对象已正确初始化。
-
我的实现基本上与此相同:stackoverflow.com/questions/18987919/…,但我的不起作用:(
标签: java android google-chrome browser-history observers