如何从Android SyncAdapter收听进度?

时间:2011-03-11 03:05:26

标签: android listener android-syncadapter

我记得读过同步适配器的广播接收器接口或同步进度事件的一些ResultReceiver。 SyncAdapter模式中是否内置了一些东西,还是本土的?

2 个答案:

答案 0 :(得分:11)

我刚刚从同步适配器实现了广播接收器,它就像发条一样!

使用Receiver set作为内部类并在onCreate中调用registerReceiver并在onDestroy中调用unregisterReceiver为我做了这个。

由于我有一个生成和查询多个线程的策略方法,所以我在SyncAdapter运行开始时所拥有的只有:

Intent intent = new Intent();
intent.setAction(ACTION);
intent.putExtra(SYNCING_STATUS, RUNNING);
context.sendBroadcast(intent); 

在同步运行结束时,我有:

intent.putExtra(SYNCING_STATUS, STOPPING);
context.sendBroadcast(intent); 

在我的活动中,我声明:

onCreate(Bundle savedInstance){

super.onCreate(savedInstance);
SyncReceiver myReceiver = new SyncReceiver();
RegisterReceiver(myReceiver,ACTION);

}



onDestroy(){

super.onPause();
unRegisterReceiver(myReceiver);

}



 public class SyncReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
            Bundle extras = intent.getExtras();
    if (extras != null) {
        //do something  
    }
   }
 }

对于此方案,您无需将接收器添加到清单文件中。只是按原样使用!

答案 1 :(得分:5)

什么有效:

2010年Google IO会话中建议的方法Developing Android REST client applications是将列放入ContentProvider中作为标记,以指示正在提取或放置记录等。这允许每行微调器(或其他)视觉变化)放在你的UI中。您可以通过驱动ListView的自定义CursorAdapter来实现。您的ContentProvider可以根据需要更改标志。

什么不是:

您还可以使用SyncStatusObserver - 这几乎无用,因为它会响应每次状态更改,而不仅仅是您的特定帐户/内容授权对,而且实际上并没有告诉您任何其他内容而不是发生了变化。因此,您无法分辨正在同步的内容,并且您无法区分“同步事件的开始”和“同步事件结束”。一文不值。 :P