Androidの連絡先を同期しようとしています。名と家族の名前を使用して連絡先を識別し、raw_idで更新したいのですが、家族の名前と名前を検索する方法がわかりません。サンプルファイルを見ましたが、raw_idで検索(および同期)するための説明しかありません!
2 に答える
別のフィールドとしての「姓」は、連絡先テーブルの一部ではありません。
Contacts テーブルの行は、プロバイダーによって自動的に生成されます。一般に、1 つの Contacts 行は、ContactsContract.RawContacts の 1 つ以上の生の連絡先を集約します。各未加工連絡先には、姓を含む StructuredName 行があります。
説明した検索を行うには、FAMILY_NAME と GIVEN_NAME で ContactsContract.CommonDataKinds.StructuredName を検索します。LOOKUP_KEY を含むプロジェクションを提供します。これは、必要な ContactsContract.Contacts の行への「永続的な」リンクです。
残念ながら、これはドキュメントのみに基づいています。LOOKUP_KEY は、StructuredName のクエリで使用できる列の一部であると想定されていますが、ドキュメントが実装と一致しない他のケースを見てきました。どうやら、開発者は実装された列名のリストを含めることがありますが、実際にはそれらを返すことを実装していないようです。
また、元の応答では getContentResolver() が使用されていました。可能な限り、代わりに CursorLoader を使用してください。
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クラス全体を作成して、呼び出しを簡単にすることもできます。