Intereting Posts
Можно ли синхронизировать Android AsyncTask doInBackground с сериализацией выполнения задачи? Android In-App Purchase проверяет покупателя в автономном режиме Android Media Player не будет воспроизводиться после остановки Как создать круглое изображение с использованием андроида? Как получить String Resource в адаптере ViewPager? Открытый исходный код для разработки игр для Android SlidingDrawer над GoogleMap Android: как установить событие onClick для кнопки в элементе списка в ListView Закусочная не перемещается FAB, который находится внутри фрагмента OnRecivedError не показывает страницу пользовательских ошибок Как избежать использования экранной клавиатуры для редактирования EditText в андроиде Как отправить одно сообщение с помощью Firebase Messaging Постоянно получать … DeviceMonitor] Не удалось запустить мониторинг Проблема для реализации twilio api в android Распознавание лиц, не обнаруживающих лиц, Android

Как уведомить вызывающую активность при завершении работы SyncAdapter?

В моем проекте Android я использую специальный SyncAdapter который загружает данные и сохраняет их в локальной базе данных SQLite.

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

Я планирую синхронизацию из основной Activity с помощью ContentResolver например …

 ContentResolver.requestSync(account, Authentication.AUTHORITY, bundle); 

Существует ли общий способ уведомления о вызывающей Activity при завершении синхронизации?

Solutions Collecting From Web of "Как уведомить вызывающую активность при завершении работы SyncAdapter?"

Вы можете сделать это с помощью ContentResolver.notifyChange() .

Итак, в вашем SyncAdapter вы бы хотели что-то вроде этого:

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

В Activity вы затем используете 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); } } 

В своей деятельности вы можете добавить:

 @Override public void onResume() { super.onResume(); mSyncMonitor = ContentResolver.addStatusChangeListener( ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE | ContentResolver.SYNC_OBSERVER_TYPE_PENDING, this ); } @Override public void onPause() { ContentResolver.removeStatusChangeListener(mSyncMonitor); super.onPause(); } @Override public final void onStatusChanged(int which) { // TODO update activity data }