0

Androidの連絡先を同期しようとしています。名と家族の名前を使用して連絡先を識別し、raw_idで更新したいのですが、家族の名前と名前を検索する方法がわかりません。サンプルファイルを見ましたが、raw_idで検索(および同期)するための説明しかありません!

4

2 に答える 2

1

別のフィールドとしての「姓」は、連絡先テーブルの一部ではありません。

Contacts テーブルの行は、プロバイダーによって自動的に生成されます。一般に、1 つの Contacts 行は、ContactsContract.RawContacts の 1 つ以上の生の連絡先を集約します。各未加工連絡先には、姓を含む StructuredName 行があります。

説明した検索を行うには、FAMILY_NAME と GIVEN_NAME で ContactsContract.CommonDataKinds.StructuredName を検索します。LOOKUP_KEY を含むプロジェクションを提供します。これは、必要な ContactsContract.Contacts の行への「永続的な」リンクです。

残念ながら、これはドキュメントのみに基づいています。LOOKUP_KEY は、StructuredName のクエリで使用できる列の一部であると想定されていますが、ドキュメントが実装と一致しない他のケースを見てきました。どうやら、開発者は実装された列名のリストを含めることがありますが、実際にはそれらを返すことを実装していないようです。

また、元の応答では getContentResolver() が使用されていました。可能な限り、代わりに CursorLoader を使用してください。

于 2013-01-15T19:35:04.183 に答える
0

Queryコマンドのselection引数を使用するだけです。

Cursor cursor = Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, ContactsContract.Contacts.DISPLAY_NAME + "=" + familyName, null, null); 

次に、カーソルをループしてIDを探します。

String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 

DataSourceクラス全体を作成して、呼び出しを簡単にすることもできます。

于 2013-01-15T18:54:34.667 に答える