0

具体的には、'Droid HTC incredible、Androidバージョン2.2、ベースバンド2.15.00.07.28、カーネル2.6.32.17-g9a2fe16、ビルド3.26.605.1、ソフトウェア番号3.26.605.1があります。

EclipseとAndroidSDKがすべてインストールされ、正常に実行されています。EclipseのDroidでデバッグしてシングルステップコードを実行する方法は素晴らしいです。

私は多くの本を読み、すべての例を実践として試し、JavaだけでなくC ++を含む他のオブジェクト指向言語でのソフトウェア開発の長年の経験(> 10年)に基づいていますが、私は選んでいますそれはかなり速く上がります。

また、リポジトリ/gitを実行しているDroidで実行されているソースコードのバージョンもダウンロードしました。FRG83Gpackages/apps / AccountsAndSyncSettings / src / com / android/settingsコードを調べています。 。

今。同期が失敗したときに通知する小さなアプリを作成したいと思います。私がかゆみを感じようとしているのは、GMailの連絡先インターフェースを使用して大量の変更を加えた後(たとえば)、'Droidがそれらを同期できない(おそらく削除が多すぎる?)ということです。そのため、同期が常に失敗する場合は、通知バーアイコンを表示して、この同期の失敗について知らせたいと思います。このようなアプリがないと、失敗していることを最初に示すのは、おそらく2〜3日後に連絡先情報が欠落していることに気付いたときです。

したがって、ロジックは、同期アクションがステータスを変更したときに通知を受けるために、私の小さなアプリがSyncStatusObserverである必要があることを示しているように見えます。次に、その同期でSyncStatusInfoを取得し、どの同期がいつ失敗したかを記録します。私が収集できることから、これはSyncStatusObserverを実装し、ContentResolver.addStatusChangeListenerを呼び出してブロードキャストに接続することを意味します。これを実装しましたが、通知メッセージが表示されます。

アカウントタイプにはゼロから多数のアカウント権限があり、各アカウント権限は同期されるデータのタイプ(連絡先とカレンダーなど)を示すという点で、オブジェクトモデルを理解していると思います。

SyncStatusObserverの単一のメソッドonStatusChanged(final int which)には、「int which」パラメーターがあります。これは、どのアカウントタイプまたはどのアカウント権限が同期ステータスを変更したかを示しているように見えます。私はこれを作成して接続し、ある種のデータが同期されたときに、予想どおり、これらのメソッド呼び出しを受信して​​います。アプリの実行中に、Eclipseデバッガーのログウィンドウでこれを確認しました。

私の質問は、パラメータ値がアカウントタイプやアカウント権限に戻る単一のintをどのように関連付けるかです。SyncInfo getCurrentSync()を呼び出して、アカウント、権限、およびstartTimeを記録したいと思います。(なぜ開始時間ですか?本当に終了時間と終了ステータスが必要ではありませんか?)

ここでstackoverflowを検索すると、投稿で見つかりますAndroid SyncAdapterの進捗状況をどのようにリッスンしますか?SyncStatusObserverは、単一の整数パラメーターであまり有用な情報を伝達しないため、かなり役に立たないことを示しています。おー。わかった。

この質問を見る別の方法があると思います:HTC Incredibleで、ホーム画面で[メニュー]->[設定]->[アカウントと同期]->[Google(リストされているアカウント)]を選択すると、ユーザーインターフェイスに次のように表示されます。 GMailアカウントの各アカウントタイプが正常に同期された最後の時間。この情報を取得するコードはどこにありますか。これは私が求めているのと同じ情報であり、各SyncStatusObserverのonStatusChangedメソッドの呼び出し後にこの情報を取得したいと思います。

Syncadapterの最終更新日を投稿する場合。これは基本的に、最終同期の日付/時刻が現在のDroidコードによって公開されていないことを示しています。

各SyncAdatorsの最後に成功した同期日時を取得する他の方法はありますか?私は本当にかゆみを掻きたいです(いわば)。

4

1 に答える 1

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);
            }
        });
    }
};
于 2012-07-23T03:46:27.533 に答える