各連絡先のタイムスタンプはありませんか?
連絡先の変更 (追加、削除、または変更) について通知を受ける必要があります。を実装しましたContentObserver
が、この方法を使用すると、連絡先に変更が発生した場合にのみ通知を受け取ることができますが、どの連絡先が変更されたのかわかりません! 助言がありますか?
各連絡先のタイムスタンプはありませんか?
連絡先の変更 (追加、削除、または変更) について通知を受ける必要があります。を実装しましたContentObserver
が、この方法を使用すると、連絡先に変更が発生した場合にのみ通知を受け取ることができますが、どの連絡先が変更されたのかわかりません! 助言がありますか?
ContactsContract.RawContacts列を確認してください
int DIRTY
VERSIONが変更されたことを示す読み取り/書き込みフラグ。この行は、所有するアカウントによって同期される必要があります。URIにCALLER_IS_SYNCADAPTERクエリパラメータが指定されていない限り、生の連絡先が変更されるたびに、値は自動的に「1」に設定されます。同期アダプターは、不要な同期を防ぐために、常にこのクエリパラメーターを提供する必要があります。ユーザーがサーバー上のデータを変更すると、同期アダプターが電話の連絡先を更新します(CALLER_IS_SYNCADAPTERフラグなし)。これにより、DIRTYフラグが設定されます。サーバーに変更をもたらします。
この列は、連絡先が変更されたときに連絡先の同期を開始するために同期アダプターによって使用されます。これから何かを得るかどうかを確認してください。
私は似たようなことをしなければなりませんでした。私がしたことは、タイムスタンプに基づいて同期することでした。フィールドを使用して、連絡先が最後に更新された時刻を追跡します。
ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP
次に、同期操作を続行し、メンバー変数を最新の同期時刻に更新するたびに。同期が完了すると、連絡先の最終同期時刻が表示されます。
変更オブザーバーが何かを登録すると、この時間以降に影響を受けるすべての行についてコンテンツ プロバイダーにクエリを実行します。次に、カーソルを繰り返し処理し、各行を処理します。