我使用 SyncAdapter 将我的数据与服务器同步。一切正常,但我很难将额外内容发送到SyncAdapter
.
在我的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
...
}
我想使用 extras 来找出需要同步的数据。此外,系统会忽略 ContentResolver 特定的附加内容:例如 ContentResolver.SYNC_EXTRAS_MANUAL(不会立即执行同步)
编辑:
我刚刚注意到,只有在由 ContentObserver.onChange() 调用时,它才会丢失那些额外的参数。当我requestSync()
在我的活动中调用时,一切都按预期进行。