Как приостановить и возобновить тему в Android

Когда я получу UserRecoverableAuthIOException в AbstractThreadedSyncAdapterЯ создаю уведомление, как показано ниже.

Вот как я создаю сервис:

@Override public IBinder onBind (Intent arg0) {// TODO Автоматически сгенерированный метод stub Log.i("Сервис", "Поток запущен"); вернуть this.getSyncAdapter().getSyncAdapterBinder(); }

private GoogleTasksSyncAdapter getSyncAdapter() {
    if (syncAdapter == null)
    {
        Log.i("Service", "syncAdapter started");
        syncAdapter = new MySyncAdapter(this);

    }
    return syncAdapter;

}

Как только поток запущен, я поднимаю уведомление. Но как только пользователь нажимает на уведомление, он может видеть действие авторизации. После авторизации, как возобновить с последнего пункта. Т.е. как получать уведомления после закрытия активности в Syncadapter.

3 ответа

Поток SyncAdapter запущен, и вы хотите получать уведомление о завершении SyncAdapter, верно?

Таким образом, вы можете связать поток SyncAdapter с BroadCast.

В вашем классе SyncAdapter:

Intent i = new Intent(SYNC_FINISHED);
    context.sendBroadcast(i);
    Log.i(TAG, "Network synchronization complete");

В упражнении или фрагменте:

private BroadcastReceiver syncFinishedReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "Sync finished!!");

        // Here you can send your notification or another thing that you want
    }
};

@Override
public void onStart() {
    super.onStart();
    getActivity().registerReceiver(syncFinishedReceiver, new IntentFilter(SyncAdapter.SYNC_TASK_FINISHED));
}

@Override
public void onStop() {
    super.onStop();
    getActivity().unregisterReceiver(syncFinishedReceiver);
}

ПРИМЕЧАНИЕ. Константу SYNC_FINISHED вы можете предварительно определить в своем SyncAdapter.

Я надеюсь, что помог тебе.

Привет!

В вашем SyncAdapter вы делаете что-то вроде:

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

    Log.i(TAG, "Beginning network synchronization");

    if(extras.getBoolean(RUN_METHOD_1) || extras.getBoolean(RUN_ALL)) {
        method1();
    }
    if(extras.getBoolean(RUN_METHOD_2) || extras.getBoolean(RUN_ALL)) {
        method2();
    }
}

public void method1(){
  try{
        // do something

     } catch (Exception e) {
       e.printStackTrace();

       // here you can send your notification when exception occours.
     }
}

public void method2(){
  try{
        // do something

     } catch (Exception e) {
       e.printStackTrace();

       // here you can send your notification when exception occours.
     }
}

в вашем коде "авторизации" вы делаете что-то вроде:

        Bundle b = new Bundle();
        b.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
        b.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
        b.putBoolean(SyncAdapter.RUN_METHOD_1, true);

        ContentResolver.requestSync(account, CONTENT_AUTHORITY, b); 

так что вы можете запустить там, где остановилась синхронизация.

Привет!!!

Вот решение,

нам нужно использовать syncResult.stats.numAuthExceptions чтобы сказать об исключении, он автоматически выдает сообщение. syncResult.delayUntil будет ждать и перезапустить синхронизацию по истечении времени

Как показать сообщение об ошибке синхронизации

Другие вопросы по тегам