0

私のアプリはカレンダーイベントを作成します。イベントの説明には連絡先の名前が含まれています。ユーザーが電話の連絡先を使用して連絡先の名前を変更した場合、その変更をカレンダーイベントの説明フィールドに反映させたいと思います。

それを行うための最良の方法は何ですか?

私は2つの選択肢を考えることができます。どちらにも、自分のデータベースにある連絡先の名前のコピーが含まれています。変更が発生したら、変更されたレコードを検索し、カレンダーイベントを更新します。

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

  1. 連絡先にコンテンツオブザーバーを登録し、すべての連絡先名を比較します。
  2. 同期アダプターを使用する

どちらの方法が本当に効率的ですか?

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

まったく別の方向性を含め、どんな助けでも大歓迎です。

4

1 に答える 1

1

SyncAdapterには絶対にアカウントが必要です。システムにそれらを認識させる唯一の方法 は、ContentResovlerとAndroidManifest.xmlのいくつかのxmlリソースを使用して、それらをアカウント/ContentAuthorityマッピングに関連付けることです。

独自の何もしないアカウントと何も提供しない権限を作成し、SyncAdapterがサーバーと通信しないようにすることができると思います...しかし、そうすると、タイマー呼び出しのあるサービスと同じものになります。 。既存のSyncAdapterを乗っ取ったり、並行して作業したりすることはできません。特定のContentAuthorityに登録されているSyncAdapterは1つだけである必要があります。

ContentProviderのペア間でデータをクロスフィルするには、ContentObserverとサービスを使用して実装する必要があります。欠点は、サービスを存続させるために一生懸命働く必要があることです。OSによる使用率が高いと、サービスが停止する傾向があります。ダウンしたら、バックアップを開始する方法を見つけて(タイマー?)、サービスが停止している間に見逃した変更を手動で確認する必要があります。

于 2011-07-01T12:51:27.167 に答える