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); 
      } 
     }); 
    } 
}; 
相關問題