How to notify calling Activity when SyncAdapter has finished?

android, android-contentresolver, android-syncadapter, callback, synchronization

Solution

You could do this with with `ContentResolver.notifyChange()`.

So in your `SyncAdapter` you would at something like this:

...
@Override
public void onPerformSync(Account account,
                          Bundle extras,
                          String authority,
                          ContentProviderClient provider,
                          SyncResult syncResult) {

    // 1) Download data via AsyncTask
    // 2) Store data via ContentProvider

    getContext().getContentResolver().notifyChange(<your_content_uri>, null, false);
}
...

In the Activity you then use `ContentResolver.registerContentObserver()`:

public class MyActivity extends Activity  {

    private ContentObserver mObserver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        mObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
            public void onChange(boolean selfChange) {
                // Do something.
            }
        };
        getContentResolver().registerContentObserver(<your_content_uri>, mObserver);
    }

    @Override
    public void onDestroy() {
        getContentResolver().unregisterContentObserver(mObserver);
    }
}

Problem

In my Android project I use a custom `SyncAdapter` which downloads data and stores it in local SQLite database. ``` public class CustomSyncAdapter extends AbstractThreadedSyncAdapter { public CustomSyncAdapter(Context context, boolean autoInitialize) { super(context, autoInitialize); } @Override public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) { // 1) Download data via AsyncTask // 2) Store data via ContentProvider } } ``` I schedule sychronization from the main `Activity` using the `ContentResolver` such as ... ``` ContentResolver.requestSync(account, Authentication.AUTHORITY, bundle); ``` Is there a common way the calling `Activity` is notified when the synchronization has finished?

Original source