【问题标题】:ContentResolver.requestSync <= send extras to => SyncAdapter.onPerformSyncContentResolver.requestSync <= 发送额外内容到 => SyncAdapter.onPerformSync
【发布时间】:2013-07-23 14:57:06
【问题描述】:

我使用 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() 调用时,它才会丢失那些额外的参数。当我在 Activity 中调用 requestSync() 时,一切正常。

【问题讨论】:

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


    【解决方案1】:

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

    问题是我试图将 URI 作为可打包的额外内容发送。当我通过 ContentObserver 发送它时,它只是默默地未能将它发送到 SyncAdapter。但是当我从我的 Activity 尝试相同的调用时,它导致了一些异常(不记得它是什么)。

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

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多