ContentResolver.requestSync <= 发送额外内容到 => SyncAdapter.onPerformSync



我使用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
...
}

我想使用额外的功能来找出需要同步的数据。此外,系统会忽略ContentResolver特定的附加功能:例如ContentResolver.SYNC_extras_MANUAL(同步不会立即执行)


编辑:我刚刚注意到,只有当ContentObservator.onChange()调用时,它才会丢失那些额外的参数。当我在活动中调用requestSync()时,一切都像expected一样工作。

我不知道它背后的真正原因,但我设法让它发挥了作用。

问题是我试图将URI作为一个可分组的额外值发送。当我通过ContentObserver发送它时,它只是无声地无法将它发送到SyncAdapter。但当我尝试"活动"中的同一个调用时,却出现了一些异常(不记得是什么)。

解决方案是去掉这个多余的,转而发送一些常量整数。

相关内容

  • 没有找到相关文章

最新更新