【发布时间】:2010-10-24 18:51:51
【问题描述】:
我正在尝试使用 contentResolver.delete 删除 ContentObserver(在“content://sms/”上)onChange() 方法中收到的短信,但在删除 ContentObserver 后又调用了一次。
您能否解释一下,尽管 DeliverSelfNotifications() 返回 false,但 ContentObserver 会调用自己吗?
我建议在删除短信之前注册 ContentObserver 并在之后重新注册,但不优雅。
我的代码:
private class SmsMmsContentObserver extends ContentObserver {
public SmsMmsContentObserver(Handler handler)
{
super(handler);
}
@Override public boolean deliverSelfNotifications() {
return false;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Uri uriSMSURI = Uri.parse("content://sms/");
Cursor cur = getContentResolver().query(uriSMSURI, null, null,
null, null);
if (cur.moveToNext())
{
int threadIdIn = cur.getInt(cur.getColumnIndex("thread_id"));
getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null);
}
}
}
在服务中注册观察者的方法。
private void registerSmsMmsObserver()
{
if (observer == null)
{
observer = new SmsMmsContentObserver(new Handler());
contentResolver = getContentResolver();
contentResolver.registerContentObserver(uriSmsMms, true, observer);
}
}
private void unregisterSmsMmsObserver()
{
if (contentResolver != null)
contentResolver.unregisterContentObserver(observer);
observer = null;
}
【问题讨论】:
标签: android sms observer-pattern