私はここ数週間の間に同期アダプタの概念全体を理解しようとしており、機能に関する質問はほとんどありません。私はAndroidの連絡先内のすべての変更にAndroid - Androidの連絡先を聞いてデルタを取得
アプローチ1聴きたい
:
を私はカスタムアカウントを作成しても、同期アダプタを作成しました。 ContactsContract.Contacts.CONTENT_URI
と、 、public void onChange(boolean selfChange)
、ContentObserver
クラスのブロードキャストリスナーを作成しました。連絡先データが変更されたときに、同期アダプタを起動するためのトリガーポイントとして機能しているContentResolver.requestSync(account,ContactsContract.AUTHORITY,bundle)
を呼び出しています。
すべてはここまで正常に見えるが、SyncAdapterクラスで私はonPerofmSync
に
SyncResult
変数に任意のデータが届かないので、どのように私は、連絡先からのデルタ変化を得ることができますか?
これが同期アダプタをトリガする方法でない場合は、私を修正してください。
アプローチ2:
私は変更を取得することができたが、私の質問は
である彼らはdirtyFlag
が1 に設定されている連絡先データベースを照会話していたいくつかの例を踏襲しています
その
dirtyFlag
の値を '0'に戻すのは誰ですか?
もし私がそれをしなければならない場合、同じことをする電話機上に複数のアプリケーションがあると言うことができます。私のアプリケーションが情報にアクセスしようとする前に、フラグを '0'に設定するアプリケーションがあるとします。私はすべての変更を見逃すことになるでしょう。
アプローチ3:
クエリのデータベースと私自身のデータベースにと「バージョン」は、接触の変化としてそれを考慮して変更された場合、各連絡先のversion
を追跡します。これは重いプロセスのようです。
最後に私の質問は、ユーザーのデバイスの 連絡先の変更を聞くための最良の方法は何ですか?あなたは何ができるか
これは私の質問と同様に3番目のアプローチです。 – Prakash
うん、それは私がやっていることなので、それほど重いプロセスではなく、すべての連絡先を調べるクエリがなければこれを行う方法はありません。 – marmor
「registerContentObserver(ContactsContract.Contacts.CONTENT_URI)」コールのトリガーが最も小さいたびに、連絡先全体のクエリーを実行して、何が変更されたかを確認する必要があります。 –