voglio mostrare un ProgressBar nel ActionBar mentre il mio SyncAdapter è attivamente sincronizzazione di contenuti da e verso il web.SyncAdapter animazione in esecuzione - Come sapere se SyncAdapter è attivamente sincronizzando
Ho provato a utilizzare SyncStatusObserver insieme a ContentProvider.addStatusChangeListener. Tuttavia, non posso controllare se un SyncAdapter è attivo. Posso controllare solo:
- SyncAdapter è in attesa utilizzando ContentResolver.isSyncPending
- SyncAdapter è in attesa o che lavorano attivamente con ContentResolver.isSyncActive
Questi flag possono essere combinate: !isSyncPending && isSyncActive
in modo che sia possibile verificare che uno SyncAdapter sta lavorando attivamente e non ha alcun lavoro in sospeso. Tuttavia, in alcuni casi il SyncAdapter funziona attivamente e ha una seconda richiesta in attesa che lo attende.
sembra così semplice, ma non riesco a trovare un modo per aggirare questo problema. Avere il ProgressBar visibile quando SyncAdapter non è in esecuzione dà agli utenti l'impressione che la sincronizzazione sia molto lenta. Non avendo mostrato ProgressBar, l'utente pensa che non stia accadendo nulla.
La soluzione sopra nel codice seguito è mostrata. Registriamo l'osservatore nella activity.onResume:
int mask = ContentResolver.SYNC_OBSERVER_TYPE_PENDING | ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE;
syncHandle = ContentResolver.addStatusChangeListener(mask, syncObserver);
Lo syncObserver viene qui definito come:
syncObserver = new SyncStatusObserver()
{
@Override
public void onStatusChanged(int which)
{
Account account = getSomeAccount();
boolean syncActive = ContentResolver.isSyncActive(account, CONTENT_AUTHORITY);
boolean syncPending = ContentResolver.isSyncPending(account, CONTENT_AUTHORITY);
boolean isSynchronizing = syncActive && !syncPending;
updateRefreshButtonState();
}
}
Per Eclair, Froyo, Gingerbread, la soluzione sopra funziona solo se il dispositivo ha un solo account. Se esiste più di un account su un dispositivo, il primo account sarà solo sincronizzato; il resto viene ignorato. – ChuongPham