1

この単純なクエリを使用して連絡先のリストを取得しようとしています。これは、キリル文字を含む名前を検索しようとするまで、入力フィルターの大文字と小文字を完全に無視して機能します。

Cursor c = this.getContext().getContentResolver().query(Phone.CONTENT_URI,
            PHONE_PROJECTION, Phone.DISPLAY_NAME + " LIKE '%"+filter+"%'", null,     Phone.LAST_TIME_CONTACTED + " DESC");

問題は、このコードが完全一致の場合にのみキリル文字を含む名前を返すことです。そのため、キリル文字では大文字と小文字が区別されます。キリル文字でも大文字と小文字を区別しないように検索したいと思います。アプリは最小限の SDK 2.1 で実行されます

システム自体 (4.0 ICS でテスト済み) は、連絡先リスト (デフォルトのシステム アプリ - People) で大文字と小文字を区別しない検索を行うことができます。

返信ありがとうございます。

4

1 に答える 1

0

あなたのコードを修正しました, 残りを処理することを確認してください 私は例を作りました これは修正されたコードです:

 String name = "contact_name_to_search_for"
 Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,
            null,"DISPLAY_NAME" + " LIKE '%"+name+"%'", null,
            ContactsContract.CommonDataKinds.Phone.LAST_TIME_CONTACTED + " DESC");

これは、たとえば私が作成した完全に処理されたコードです

String name = "contact_name_to_search_for"
        ContentResolver cr = getContentResolver();
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,
            null,"DISPLAY_NAME" + " LIKE '%"+name+"%'", null,
            ContactsContract.CommonDataKinds.Phone.LAST_TIME_CONTACTED + " DESC");
    if (cursor.moveToFirst()) {
        String contactId =
                cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)).toLowerCase();
        Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId.toLowerCase(), null, null);
        while (phones.moveToNext()) {
            String number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            int type = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
            switch (type) {
                case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
                    Toast.makeText(getApplicationContext(), number+" Home number",Toast.LENGTH_SHORT ).show();
                    break;
                case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
                    Toast.makeText(getApplicationContext(), number+" Mobile number",Toast.LENGTH_SHORT ).show();
                    break;
                case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
                    Toast.makeText(getApplicationContext(), number+" Work number",Toast.LENGTH_SHORT ).show();
                    break;
            }
        }
        phones.close();
    }
    cursor.close();
于 2014-05-22T20:29:19.687 に答える