16

A hopefully straightforward question: When ContentResolver.notifyChange() is called for a given URI, are ContentObservers observing descendent URIs of this URI notified?

E.g. Say I have a cursor setup to observer the URI of a specific resource:

 Uri uriA = Uri.parse("content://" + AUTHORITY + "/orders/21");
 cursor.setNotificationUri(getContext().getContentResolver(), uriA);

I then notify the ContentResolver of a change to an ancestor of this URI (e.g. because I have deleted all orders):

 Uri uriB = Uri.parse("content://" + AUTHORITY + "/orders");
 getContext().getContentResolver().notifyChange(uriB, null);

Would my Cursor, registered to observe uriA, be notified?

tomato
  • 3,373
  • 1
  • 25
  • 33

2 Answers2

30

It depends on how it was registered. If the ContentObserver was registered with the notifyForDescendents argument set as true, then yes. Otherwise no.

The registration is done through the method ContentResolver#registerContentObserver:

void registerContentObserver (Uri uri, boolean notifyForDescendents, ContentObserver observer)
Xiao
  • 1,552
  • 2
  • 22
  • 20
12

After testing it, simple answer: yes.

tomato
  • 3,373
  • 1
  • 25
  • 33
  • 6
    I believe my answer is more accurate. Could you accept it or incorporate it into your own answer please? I have a feeling people often don't look past the accepted answer. – Xiao Jul 31 '14 at 22:08