簡単な連絡先アプリケーションを開発し、名前を使用した検索も実装しました。しかし、今は名前と会社の両方を使用して検索したいと考えています (デフォルトの Android 連絡先アプリと同じように)。会社を使用して個別に検索することはできますが、返される連絡先 ID が異なるため、他の連絡先情報を取得できませんでした...下にコードを貼り付けました。
名前検索を使用して連絡先を取得するコード: (検索文字列は、textchangedlistener を使用して edittext から取得されます)
private Cursor getContactsByName(String temp) {
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME, };
String selection = ContactsContract.Contacts.DISPLAY_NAME + " like '"
+ temp + "%'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs,
sortOrder);
}
企業検索を使用して連絡先を取得するコード: (検索文字列は、textchangedlistener を使用して edittext から取得されます)
private Cursor getContactsByCompany(String temp) {
Uri uri = ContactsContract.Data.CONTENT_URI;
String[] proj = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME, Organization.COMPANY};
String selection3 = Data.MIMETYPE + "='" + Organization.CONTENT_ITEM_TYPE +
"' AND " + Organization.COMPANY + " like '" + temp + "%'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
return managedQuery(uri, proj,
selection3, selectionArgs, sortOrder);
}
最初のケース (つまり、名前検索) では、連絡先 ID、名前などの情報を含むカーソルを取得しています。連絡先 ID を使用して、写真、メールなどの連絡先の情報をビューの連絡先ページに表示します。
2 番目のケース (会社検索) では、連絡先 ID、名前、および会社の情報を含むカーソルが表示されます。ただし、同じ連絡先に対して返される連絡先 ID は、最初のケースで返されるものとは異なります。そのため、この連絡先 ID を使用して写真、メールなどの連絡先の他の情報を取得することはできません。
連絡先の連絡先 ID がケース 1 とケース 2 の両方で同じ場合、重複を削除することで 2 つの検索を 1 つに統合できます。しかし、ここではそうではありません。
私の質問は、連絡先 ID が異なる場合に 2 番目のケースから連絡先情報を見つける方法と、2 つの検索を組み合わせる方法です。