Androidの連絡先コンテンツプロバイダーに電話番号のリストを照会して、そのリストのアイテムと一致する電話番号を持つ連絡先を取得する方法を理解しようとしています。ストレートSQLでは、次のようなものを使用します。
SELECT * FROM PHONES WHERE NUMBER IN ('1234','1235')
CP APIを使用しているので、何かが足りないようです。これはonCreateLoader()
クエリのスニペットです。このクエリの結果で返されるレコードはありませんが、データベース内の連絡先にそれらの電話番号が存在することはわかっています。データベースに保存されている電話番号は次のようにフォーマットされているため、レコードが見つからないと思います。
+1 425-555-1212
IN()
CPにクエリを実行し、フォーマットされていないデータに対してクエリリストを評価する方法があるかどうかはわかりません。onCreateLoader()
クエリは次のとおりです。
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String[] projection = new String[] {
ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.LABEL,
ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY,
ContactsContract.CommonDataKinds.Phone.NUMBER};
return new CursorLoader(
getActivity().getApplicationContext(),
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
projection,
ContactsContract.CommonDataKinds.Phone.NUMBER+" IN ('4255551212','4255551213')",
null,
null);
}
前のクエリの電話番号の1つで(以下に示すように)使用PhoneLookup
すると、実際には正しい連絡先の一致が得られるため、これを行う方法が必要であると思います。残念ながら、PhoneLookup
電話番号のリストを処理できるようには見えませんが、1つの電話番号しか処理できないようです。
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String[] projection = new String[] {
ContactsContract.PhoneLookup._ID,
ContactsContract.PhoneLookup.DISPLAY_NAME,
ContactsContract.PhoneLookup.LABEL,
ContactsContract.PhoneLookup.LOOKUP_KEY,
ContactsContract.PhoneLookup.NUMBER};
return new CursorLoader(
getActivity().getApplicationContext(),
Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode("4255551212")),
projection,
null,
null,
null);
}
これを達成する方法はありますか、それとも同じ結果をもたらす別の方法がありますか?結果は次のとおりです。
- 電話番号のリストを指定して、リストに電話番号があるすべての連絡先を選択します
助言がありますか?