我正试图使用contentresolver.delete删除contentobserver(on“content://sms/”)onchange()方法中接收到的sms,但在删除之后,contentobserver将再次被调用。
你能解释一下,当ContentObserver调用自己时,deliverselfNotifications()返回false吗?
我在删除短信息之前将soultion设置为uregister 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;
  }

最佳答案

如果要在短信到达收件箱时将其删除,请使用与短信接收意图匹配的OrderedBroadcast接收器,获得比常规收件箱更高的优先级,然后取消广播。
此外,删除肯定会对任何看到此uri的contentobserver调用onchange。
DeliverselfNotification并不像您想象的那样:
如果此观察者对通过观察者注册的光标所做更改的通知感兴趣,则返回true。

10-05 19:08