5

連絡先のバックアップと同期に取り組んでいます。

目標は、すべての連絡先のすべての詳細をサーバー (定義されたカスタム プロトコル) にバックアップとして送信することです。

アプリケーションの最初の起動時に、すべての連絡先がキューに入れられ、サーバーに送信されます。その後、新しい連絡先の追加/連絡先の更新をリッスンするバックグラウンド サービスが常に実行され、この新しい/更新された連絡先がバックグラウンド サービスによってサーバーに送信されます。

レコードを取得するためにRawContactsEntityを使用しています。

ContentObserver連絡先の追加または変更の通知を取得するために、RawContacts/Data テーブルで使用してみました。しかし、私の知る限り、個々のレコードのIDではなく、テーブル全体の変更されたデータのContentObserver通知( )を提供します。onChange()

今私の問題は、変更された/新しいレコードの正確なIDを取得する方法ですか?

ネイティブの連絡先テーブルと比較して変更されたレコードを取得するためのバックアップ テーブルを作成することを考えました。しかし、接点の数が増えると、パフォーマンスが大幅に低下し、バッテリーの寿命も妨げられます。

パフォーマンスとメモリ使用量の観点から、この連絡先のバックアップ操作を達成するための最良の方法を提案できますか? 連絡先を同期する他の方法はありますか?

これで私を助けることができる例を誰かが共有できれば、非常に役に立ちます。

4

1 に答える 1

0

連絡先がアカウント ( AccountManger ) 内に保存されている場合、Android は raw 連絡先にダーティ フラグをマークします。それがあなたのアカウントでない場合、アカウント同期アダプターが連絡先をサーバーに更新し、ダーティ フラグをリセットした可能性があるため、ダーティ フラグを信頼することはできません。唯一のオプションは、完全な連絡先を再アップロードするか (シンプルでコーディングが簡単)、RawContacts のバージョン列を追跡して、どれが変更されたかを確認することです。他のアカウントから連絡先をコピーしてアップロードすることは、対応する同期アダプターがいずれにしてもそれらのバックアップを保持するため、実際にはお勧めできません。Google と同様に、Google の連絡先のコピーがサーバーに保存されます。

于 2014-09-01T05:15:16.343 に答える