6

我记得从同步适配器或同步进度事件的一些 ResultReceiver 中阅读了有关广播接收器接口的信息。SyncAdapter 模式中是否内置了一些东西,或者它是自产的?

4

2 回答 2

11

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

将 Receiver 设置为内部类并在 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  
    }
   }
 }

对于这种情况,您不需要将接收器添加到清单文件中。照原样使用!

于 2014-04-17T14:29:07.017 回答
5

什么有效:

在 2010 年 Google IO 会话中建议的方法,开发 Android REST 客户端应用程序是将列作为标签放置到您的 ContentProvider 中,以指示正在获取或放置记录等。这允许每行微调器(或其他视觉更改)放置在您的 UI 中。您可以通过驱动 ListView 的自定义 CursorAdapter 来做到这一点。您的 ContentProvider 可以根据需要更改标志。

什么不:

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

于 2011-03-14T16:37:07.050 回答