1

我使用SyncAdapter將我的數據與服務器同步。一切正常,但我很難發送額外的SyncAdapterContentResolver.requestSync <=發送附加到=> SyncAdapter.onPerformSync

在我ContentObserver我用下面的代碼來發送請求SyncAdapter:

@Override 
public void onChange(boolean selfChange, Uri changeUri) { 

    Bundle extras = new Bundle(); 
    extras.putParcelable(Globals.EXTRA_URI, changeUri); 
    extras.putInt("no", 123456); 
    extras.putBoolean(
      ContentResolver.SYNC_EXTRAS_MANUAL, true); 
    extras.putBoolean(
      ContentResolver.SYNC_EXTRAS_EXPEDITED, true); 
    ContentResolver.requestSync(account, MyProvider.AUTHORITY, extras); 

} 

然而,在SyncAdapter的一面,我不明白這些額外:

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

    Uri changeUri = extras.getParcelable(Globals.EXTRA_URI); 
    int aaa = extras.getInt("no"); 

    Log.i(TAG, "Syncadapter/uri: "+changeUri+"/"+aaa+"/"+extras.size()); 

//Logcat: Syncadapter/uri: null/0/1 

... 
} 

我想使用附加功能找出哪些數據需要同步。此外,系統會忽略ContentResolver的特定附加內容:例如ContentResolver.SYNC_EXTRAS_MANUAL(不立即進行同步)


編輯: 我只注意到,那它失去這些額外參數只有當ContentObserver.onChange稱爲()。當我在我的Activity中調用requestSync()時,一切都如預期般運作。

回答

2

我不知道背後的真正原因,但我設法讓它工作。

問題是我試圖發送URI作爲一個parcelable額外。當我通過ContentObserver發送它時,它只是無聲無息地發送給SyncAdapter。但是當我從我的Activity中嘗試相同的調用時,會導致一些異常(不記得它是什麼)。

解決方案是擺脫這個額外的東西,併發送一些常數整數。

相關問題