12

registerContentObserver やその他の方法を使用したときにどの連絡先が変更されたかを判断する簡単な方法があるかどうかを判断しようとしているだけですか? データベースがいつ変更されるかはわかりますが、更新/変更が発生するたびにすべてのレコードをチェックするかどうかはわかりません。

基本的に、連絡先のリストがあり、手動で更新される場合 (つまり、連絡先の電話番号を変更するか、新しい連絡先を追加する)、または自動で更新される場合 (たとえば、ActiveSync の写真が追加、変更される)。A) 何かが変更されたことを知り、B) どの連絡先が何らかのデータを変更したかを知りたい。

リモート サービスから写真を照合できる特定のユーザーを探しています。ユーザー アカウントにさらに情報が追加された場合は、それが一致するかどうかを調べることができるようにしたいと考えています。私はそれをスケジュールしたくありませんが、更新が発生した後に実行したいと思います。

クリス。

4

2 に答える 2

9

現在更新のためにどの Uri を登録しているかはわかりませんが、 を登録するときにContentObserver、関心のある連絡先を直接指す個別の Uri を登録することはできませんか? そうすれば、オブザーバーは、興味深い連絡先が変更されたときにのみ通知を受け取ります. SDK ドキュメントのタイトル「ルックアップ URI」のセクションで、これについて詳しく説明しています。

http://developer.android.com/resources/articles/contacts.html

ルックアップ キーは各レコード (行) に固有であるため、このようなことをすると思いますか?

Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
getContentResolver().registerContentObserver(lookupUri, false, myObserver);

そして、リスト内の個々の連絡先ごとにそれを行います.

連絡先を追加する場合

これを行うための最善の方法は、ContentObserver変更のたびに Contacts テーブルへのカーソルを再クエリし (大量のデータで頻繁に実行している場合でも、再クエリは高速です)、最高の状態を維持することです。既知の CONTACT_ID 値。保存したものを超える ID がカーソルに含まれている場合は常に、追加されたばかりです。

また、この会話をまだ見ていない場合は、一読の価値があるかもしれません。ダイアンは、コンテンツの変更の詳細を公開しないことにかなり同意しているようですContentObserver

乾杯。

于 2011-02-18T18:29:50.103 に答える
1

この質問に回答したので、変更されたコンテンツの URI を持つ ContentObserver クラスで使用できる新しいコールバック メソッドがあります: http://developer.android.com/reference/android/database/ContentObserver.html#onChange(boolean , android.net.Uri)

これは、Android API レベル 16 以降で使用できます。

于 2012-07-24T14:15:37.317 に答える