Intereting Posts
Виртуальные сообщения Google – CCS (XMPP) против HTTP-сервера Как я могу заставить свое приложение отображаться в списке поиска телефона Google Now? Как отобразить мою схему прокрутки над клавиатурой? Android: layout_weight = "33" как ушел -> видимый видимый-> пошел эффект? Как использовать намерение Action_view для публикации на стене facebook? Целевой «$ {build.target}» не существует в проекте «LibA» при запуске Android build.xml от Gradle Как перенаправить файлы на экземпляр эмулятора, используя студию Android Как правильно отредактировать арабскую строку? Как исследовать стиль в андроиде Вызов findViewById () извне активности Несколько репозиториев maven в Gradle Как получить BackgroundColorSpan для выбранного текста в android OnMenuItemSelected не вызывается, когда макет установлен для пункта меню Как найти устройство как LDPI MDPI HDPI или XHDPI Какая часть стека программного обеспечения 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 }