我正在尝试使用contentResolver.delete在ContentObserver("content://sms/")onChange()方法中删除接收到的短信,但是在删除后,ContentObserver会再次被调用。
你能解释一下吗?为什么ContentObserver会调用自身,即使deliverSelfNotifications()返回false?
我找到了一个解决方法,即在删除短信之前注销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;
}