Android - why does ContentObserver call itself?

I am trying to delete received SMS in ContentObserver (using the method "content: // sms /") onChange () using contentResolver.delete, but after deleting ContentObserver is called again.

Could you please explain mine, as ContentObserver calls itself, even though deliverSelfNotifications () returns false?

I want me to decide to settle ContentObserver before deleting SMS and register it again, but inelegantly.

My code is:

  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);
      }


    }
  }

Ways to register an observer in services.

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;
  }
+3
source share
1 answer

SMS-, "", , SMS-, , , .

, onChange contentObserver, URI.

deliverSelfNotification , , , :

true, , , .

+1

Source: https://habr.com/ru/post/1771199/


All Articles