1

私はAndroid用のアプリの開発に取り組んでおり、アプリで使用する連絡先のサブセットを追跡するために連絡先IDを保存する必要があります。現在、ローカルで使用されているテーブルにIDを保存していますが、連絡先が他の連絡先とマージされると、このテーブルの一貫性が失われます(マージされた連絡先を表すために使用されるIDは頻繁に変更されます)。一貫性を維持するための最良の方法は何ですか?

私の考え:

  • 放送されているある種のインテントまたはシステムイベントがあった場合、私はそれを聞くことができました。

  • 古いIDと新しいIDの間のマッピングがどこかに保持されている場合(ContactsContract.RawContacts?)、IDが無効になったことを検出すると、フィールドを更新できます。

  • コンテンツオブザーバーでバックグラウンドプロセスを実行し、変更を監視します。できればこれは避けたいです。

この質問は同様の問題に取り組んでいるようですが、連絡先をマージする代わりに追加する場合:Androidの連絡先アプリケーションで新しい連絡先に反応します

ありとあらゆるアイデアを歓迎します!

4

1 に答える 1

0

連絡先ルックアップURIを(文字列として)保存します。このURIは_id、連絡先とともにから作成されlookup_keyます。これら2つは、ContactsContract.getLookupUri()を呼び出すことでルックアップURIを構築できます。連絡先を検索するには、ContactsContract.lookupContact()を呼び出してクエリを実行するか、検索URIを使用して直接CONTENT_URIクエリを実行します。CONTENT_LOOKUP_URIAndroidドキュメントは、CONTENT_LOOKUP_URIについて次のように述べています。

このテーブルのcontent://スタイルURI。ショートカットを作成したり、連絡先への長期リンクを作成したりするために使用する必要があります。このURIの後には、常に「/」と連絡先のLOOKUP_KEYを続ける必要があります。オプションで、「/」とそれに続く最後の既知の連絡先IDを追加することもできます。この「完全な」フォーマットは重要な最適化であり、強くお勧めします。

連絡先の行IDが同じである限り、このURIはCONTENT_URIと同等です。同期または集約の結果として連絡先の行IDが変更された場合、このURIは間接情報(同期IDまたは構成要素の生の連絡先)を使用して連絡先を検索します

ルックアップキーはエンコードせずに追加する必要があります。エンコードされた形式で保存され、URIで使用できるようになります。

于 2012-08-23T18:29:17.853 に答える