我正在尝试使用以下内容观察者观察短信。不幸的是,它只会发生一些事件。起初我认为这是一个生命周期问题,所以我将方法放在停止,启动,恢复等方法中,以确保我的活动始终处于最前端时,我总是有一个观察者观察。任何人都有任何想法,为什么它只收集第一个新消息?在捕获第一个之后,在重新安装应用程序之前它不会启动。
private void registerContentObservers() {
ContentResolver cr = getContentResolver();
mSmsObserver = new ContentObserver(mHandler) {
@Override
public void onChange(boolean selfChange) {
Log.v(TAG, "onChange method");
}
@Override
public boolean deliverSelfNotifications() {
return true;
}
};
// cursor.registerContentObserver(mSmsObserver);
cr.registerContentObserver(Uri.parse("content://sms/inbox"), false, mSmsObserver);
}
private void unregisterContentObservers() {
ContentResolver cr = getContentResolver();
if (mSmsObserver != null) {
// just paranoia
cr.unregisterContentObserver(mSmsObserver);
mSmsObserver = null;
}
}
@Override
protected void onDestroy() {
Log.v(TAG, "onDestroy()");
unregisterContentObservers();
super.onDestroy();
}
@Override
protected void onStart() {
Log.v(TAG, "onStart()");
registerContentObservers();
super.onStart();
}
@Override
protected void onStop() {
Log.v(TAG, "onStop()");
unregisterContentObservers();
super.onStop();
}
@Override
protected void onResume() {
Log.v(TAG, "onResume()");
registerContentObservers();
super.onResume();
}
@Override
protected void onPause() {
Log.v(TAG, "onPause()");
super.onPause();
}
答案 0 :(得分:0)
我明白了。我添加了对onChange()的超级调用,在我的registerContentObserver()调用中我为notifyForDescendents()方法添加了true,最后将Handler参数更改为新的Handler()调用。
mSmsObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
Log.v(TAG, "onChange method");
super.onChange(selfChange);
}
@Override
public boolean deliverSelfNotifications() {
return true;
}
};
cr.registerContentObserver(Uri.parse("content://sms"), true, mSmsObserver);