2011-04-26 5 views
0

私のアプリは予定の予定を作成します。 ユーザーが電話の連絡先を使用して連絡先の名前を変更すると、その変更がカレンダーの予定の説明フィールドに流れます。連絡先の名前をカレンダーの予定の説明に同期させるにはどうすればいいですか

これを行うにはどのような方法が最適ですか?

私は2つの選択肢が考えられます。両方とも自分のデータベースに連絡先名のコピーを含みます。変更が発生すると、レコードが変更されたレコードを見つけ、カレンダーイベントを更新します。

問題は、効率的に新しい名前を自分のデータベースに移動する方法です。

  1. 連絡先にコンテンツオブザーバーを登録し、すべての連絡先名を比較します。
  2. 本当に、より効率的であるどの方法

同期アダプタを使用しますか?

私は同期アダプタに詳しいとは言えませんが、アダプタにはアカウントが必要でないと思います(このようなことはありますか?)、そして変更を直ちに(つまり次のスケジュールされた同期ではなく)

さまざまな方向性を含め、どんなヘルプも大変ありがとうございます。

答えて

1

SyncAdapterには絶対にアカウントが必要です。 make the system recognize themへの唯一の方法は、AndroidManifest.xmlにContentResovlerといくつかのxmlリソースを使用して、それらをAccount/ContentAuthorityマッピングに関連付けることです。

自分で何もしていないアカウントと無関係な権限を作って、SyncAdapterをにしないと、はサーバーと対話しますが、そうならばタイマーコールによるサービス。既存のSyncAdapterとハイジャックまたは並行して作業することはできません。特定のContentAuthorityに1つのSyncAdapterが登録されている必要があります。

ContentProviderのペア間でデータをクロスフィルするには、ContentObserverとサービスを使用して実装する必要があります。欠点は、あなたのサービスを存続させるために懸命に働く必要があることです。OSによって頻繁に使用されている間に殺される傾向があります。ダウンしたら、それを起動して(タイマー?)、サービスが停止していたときに見逃した変更を手動でチェックする方法を見つける必要があります。

+0

非常に良い要約。ありがとう、あなたjcwenger。 – OferR

+0

コンテンツの操作をどのように検出しますか?挿入、更新、削除など。 – Joset

+0

どこで操作を検出しますか? SyncAdapterの内部?その場合、アンドロイドフレームワークは、発生したときに直接関数呼び出しを行います。あなたがアプリについて話しているならば、特定の行やテーブルに新しいデータがあることを知らせるのはContentObserverです。その場合、それはそれ自身の質問を投稿する価値があります。 – jcwenger