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

时间:2013-07-23 14:57:07

标签: android android-contentprovider android-contentresolver android-syncadapter android-account

我使用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(不立即执行同步)


修改 我只是注意到,只有在ContentObserver.onChange()调用时才会丢失这些额外的参数。当我在我的活动中呼叫requestSync()时,一切都按照预期进行。

1 个答案:

答案 0 :(得分:2)

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

问题在于我试图发送URI作为可分配的额外内容。当我通过ContentObserver发送它时,它无声地无法将其发送到SyncAdapter。但是当我从我的Activity尝试同一个调用时,它会导致一些异常(不记得它是什么)。

解决方案是摆脱这个额外的东西,而不是发送一些常数整数。