投稿

ラベル(SyncAdapter)が付いた投稿を表示しています

SyncAdapterのススメ

SyncAdapterの練習用にSmartTrainingにSyncAdapter機能を実装してみました。これを基にざっくりSyncAdapterについてまとめてみました。細かい実装方法は面倒なのでここでは載せませんので、以下のキーワードから自分で調べてください。(と、突き放す。) 宝くじでも当たって仕事しなくて良くなるくらい暇になったらもっと細かい実装方法についても書くかもしれません。 SyncAdapterの定義 SampleSyncAdapter のように、クラウド上のデータと端末上のデータを相互に連携するための一連の仕組みを指します。 SyncAdapterの概要 アプリケーション内データとクラウド上データの連携をサポートしてくれる仕組み。 端末のアカウント設定(AccountManager)と連動する。 API Level 5以上で利用可。 SyncAdapterがやってくれること Syncのトリガを提供してくれる。 Sync中にシステムSyncアイコンを表示してくれる。 SyncAdapterがやってくれないこと Sync処理(Syncロジック)そのもの 認証処理そのもの メリット アカウント管理を端末のアカウント設定と統合できる。 システムSyncアイコンが使える。 同期中の状態をユーザに通知するのにNotificationではちょっと主張が強すぎる。通知領域以外で、バックグラウンドでタスクが実行されていることを表現するのに適している。 Sync開始したときに通信不可状態だった場合、通信が復活したら自動的にsyncをしてくれる。 個人的にはこれがSyncAdapterを実装する最大のモチベーション。 一応、ネットワークの状態監視とキュー管理を自前で作れないことはないけど。 デメリット 実装しなければいけないことがわりと多い。一般的には以下の実装が必要。 SyncAdapter SyncService Authenticator DataProvider SyncServiceのXML定義 AuthenticatorのXML定義 Syncロジック 認証画面 SyncAdapterに必要な実装 SyncAdapter Sync動作のエントリポ...

SyncAdapterで同期時にSyncアイコンを表示したい。 出来ればすぐに。

SyncAdapterを実装してrequestSync()したときに、通知領域にSyncアイコンが表示される条件。 extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true); してから、 ContentResolver.requestSync(mAccount, AUTHORITY, extras); とすればいい。  SYNC_EXTRAS_MANUALを使わないと、 authorityにCALLER_IS_SYNCADAPTER = trueが付加されててかつ、 ContentResolver経由でローカルのDBを更新している処理が一定時間以上かかると 適当なタイミングで表示される。 これだとリモートデータにアクセスしているときや、ローカルデータへのアクセス時間が短いときはSyncアイコンが表示されない。 リファレンスのどこにもこんな説明はないようだが。。。 ま、そんな感じ。

既存のアカウントタイプにサービスを追加する

イメージ
AndroidでSyncAdapterを作成する際、自前でアカウントを作成するには、 ここ に掲載されているようにAccount-authenticatorを設定すればOKです。こんな感じ。 "typeOfAuthenticator"の部分を自前のアカウントタイプに変更すればいいわけです。が、例えばGoogleのアカウントを利用したサービスを作りたい場合、自前のアカウントタイプにしてしまうと、AccountManagerやSyncAdapterを利用したときに端末に既存で設定してある認証情報を利用できなくなってしまいます。そんなときは、既存のアカウントタイプに自前のサービスだけ追加することでができます。ある意味寄生してるみたいですな。例えば、アカウントタイプcom.googleに寄生するときはこんな感じ。 合わせてsync-adapterのaccountTypeもcom.googleに変更してやります。 画面的にはこんな感じになります。 めでたくGoogleのアカウント設定内に自前のサービスを追加することが出来ました。

Android SDKのSampleSyncAdapterを図解してみた

イメージ
SyncAdapterの使い方を調べていてあまりわかり易い解説が無い中、こんなのを見つけた。「 Android SDKのSampleSyncAdapterの使い方 」 。 確かにここに書いてある通りな雰囲気。 でも、やっぱりSampleSyncAdapterはわかりにくい。文字で追ってて混乱してくるので、絵にしてみた。こんな感じ。 間違ってたらコメントください。自分も100%理解しているとは言い難いので。