Ben bir senkronizasyon uygulamış ve bunu kendi aktivitesinde bitirdiğinde bir geri arama almak istiyorum. ContentResolver.addStatusChangeListener
kullanmayı denedim, ancak eşitleme beklemede/etkin olduğunda yalnızca geri aramaları alıyorum.Senkronizasyon bittiğinde nasıl bilinir?
@Override
protected void onResume() {
super.onResume();
final int mask = ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE | ContentResolver.SYNC_OBSERVER_TYPE_PENDING;
syncObserverHandle = ContentResolver.addStatusChangeListener(mask, syncStatusObserver);
}
@Override
protected void onPause() {
super.onPause();
if (syncObserverHandle != null) {
ContentResolver.removeStatusChangeListener(syncObserverHandle);
syncObserverHandle = null;
}
}
private SyncStatusObserver syncStatusObserver = new SyncStatusObserver() {
@Override
public void onStatusChanged(int which) {
AccountManager am = AccountManager.get(TodosActivity.this);
Account a = am.getAccountsByType(Const.ACCOUNT_TYPE)[0];
Log.d(Const.TAG, "Sync status changed: " + which);
if (!ContentResolver.isSyncActive(a, DataProvider.AUTHORITY) &&
!ContentResolver.isSyncPending(a, DataProvider.AUTHORITY)) {
Log.d(Const.TAG, "Sync finished, should refresh nao!!");
}
}
};
Ancak onStatusChanged
yöntemde if
asla geçerlidir: İşte benim etkinlikten alakalı bazı kod. Ben de onResume()
elle denir çünkü muhtemelen çalışır JumpNote demo gelen bu örneği almış, bu yüzden senkronizasyon tamamlandığında muhtemelen sistemin tarafından denilen olmamıştı. Yoksa öyle mi ve yanlış bir şey mi yapıyorum? İşte LogCat olsun ne:
D/MYAPP (10903): Sync status changed: 2
D/MYAPP (10903): Sync status changed: 2
D/MYAPP (10903): Sync status changed: 4
D/MYAPP (10981): --> DataSyncAdapter.onPerformSync()
D/MYAPP (10981): <-- DataSyncAdapter.onPerformSync()
D/MYAPP (10903): Sync status changed: 4
Yani, ben olabilir benim verileri yenilemek için ikinci SYNC_OBSERVER_TYPE_ACTIVE
(4) durum değişikliği güvenmek gibi görünüyor, ama bu gerçekten çirkin görünüyor. Herhangi bir fikir? Bulduğum
1 Ben ContentResolver.isSyncActive' 'ile bir saat kaybettim. Bunu yapmak aslında çok daha kolaydı. – rds
"Bu işlemi senkronizasyon servisine ekle" dediğinizde, aslında senkronizasyon adaptörü mi demek istiyorsunuz? '' ... en sonunda '' beni düşünmemi sağlıyor: sync, onPerformSync'in sonunda tamamlandığında. – HGPB
Bunu anlayamıyorum, gönderimBroadcast ve SYNC_FINISHED nedir? –