0

作为具体的,我有一个“HTC的Droid难以置信,Android版本2.2,基带2.15.00.07.28,内核2.6.32.17-g9a2fe16,构建3.26.605.1,软件数量3.26.605.1使用SyncStatusObserver或通过其他方式获取同步状态信息?

我有Eclipse的Android SDK全部安装并运行正常。我很高兴在Eclipse中如何在我的Droid上执行调试和单步代码。

我已经阅读了大量的书籍,并尝试了所有的例子,作为练习,并且在其他面向对象的语言(包括C++,而不是Java)上建立了若干年的软件开发经验(> 10年)我正在快速采摘它。

我也下载了,我相信的是,运行在我的'Droid运行repo/git上的源代码版本,我一直在深入研究FRG83G packages/apps/AccountsAndSyncSettings/src/com/android /设置代码。

现在。我想写一个小应用程序,可以让我知道同步失败的时间。我试图搔痒的是,在我使用GMail联系人界面进行了大量更改(例如)之后,“Droid无法同步它们(可能删除了太多删除)”。所以,当一个同步一直失败时,我想显示一个通知栏图标,让我知道这个同步失败。如果没有这样的应用程序,第一个表示它失败的迹象是当我在2-3天后注意到缺少联系信息时。

因此,逻辑似乎表明我的小应用程序需要是SyncStatusObserver,以便在同步操作更改状态时通知SyncStatusInfo,然后获取该同步的SyncStatusInfo并记录哪个同步失败以及何时。从我可以收集的内容来看,这意味着实现一个SyncStatusObserver并通过调用ContentResolver.addStatusChangeListener将其连接到广播。我已经实现了这一点,我看到通知消息。

我相信我理解了对象模型,即账户类型具有零到多个账户权限,并且每个账户权限表示正在同步的数据类型(联系人与日历等)。

SyncStatusObserver的单一方法onStatusChanged(final int which)具有'int which'参数,似乎试图指示哪个帐户类型或哪个帐户权限只是改变了它的同步状态。我已经编写并连接了它,并且正在接受这些方法调用,正如人们所期望的那样,当一种数据同步时。我在执行应用程序时在Eclipse调试器日志窗口中观察到了这一点。

我的问题是,如何将您的单个int相关的参数值返回给账户类型和/或账户权限?我想调用SyncInfo getCurrentSync()并记录帐户,权限和startTime。 (为什么要开始时间?难道我们真的不想结束时间和结束状态吗?)

在这里搜索stackoverflow,我发现在How does one listen for progress from Android SyncAdapter?发布SyncStatusObserver是相当无用的,因为它没有传达非常有用的信息一个整数参数。哦。好。

我想还有另一种方式来看待这个问题是这样的:在宏达不可思议,当你在主屏幕上,并选择菜单 - >设置 - >帐户&同步 - >谷歌(列出的帐户),用户界面显示GMail帐户的每个帐户类型最后一次成功同步。获取此信息的代码在哪里,因为这与我之后的信息相同,并且我希望在每次SyncStatusObserver的onStatusChanged方法调用后获取此信息。

张贴Syncadapter last update date基本上说,最新的同步日期/时间不是由当前Droid代码公开。

是否有任何其他方式可以获取每个SyncAdator的上次成功同步日期/时间?我真的想抓我的痒(可以这么说)。

回答

1
private final SyncStatusObserver mSyncStatusObserver = new SyncStatusObserver() { 
    @Override 
    public void onStatusChanged(int which) { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       String accountName = AccountUtils.getChosenAccountName(HomeActivity.this); 
       if (TextUtils.isEmpty(accountName)) { 
        setRefreshActionButtonState(false); 
        return; 
       } 

       Account account = new Account(accountName, GoogleAccountManager.ACCOUNT_TYPE); 
       boolean syncActive = ContentResolver.isSyncActive(
         account, ScheduleContract.CONTENT_AUTHORITY); 
       boolean syncPending = ContentResolver.isSyncPending(
         account, ScheduleContract.CONTENT_AUTHORITY); 
       setRefreshActionButtonState(syncActive || syncPending); 
      } 
     }); 
    } 
}; 
相关问题