タイトルに記載されているように、電話番号を指定したすべての連絡先を照会し、連絡先の表示名と会社名のみを含むカーソルを返したいと考えています。連絡先ごとに 1 行だけ返してほしい。
これが私がこれまでに思いついたものです:
Cursor contactsCur = getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
new String[] {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Organization.COMPANY},
ContactsContract.Contacts.HAS_PHONE_NUMBER + " >? AND " + Contacts.Data.MIMETYPE + " =? " ,
new String[] {"0", ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE},
null );
これにより、電話番号と会社の両方が指定されている連絡先ごとに 1 行が返されます。会社が指定されていない連絡先は含まれません。
その理由はわかっていAND " + Contacts.Data.MIMETYPE + " =? "
ます。クエリのビットにより、会社のない連絡先が返されなくなります。問題は、このAND
部分がないと、連絡先ごとに複数の行が返されることです。
これは、ContactsContract.CommonDataKinds.Organization.COMPANY
実際にはContactsContract.Contacts.Data.DATA1
汎用フィールドである を参照しているためと思われます。
これに関するヘルプは大歓迎です!