3

私はListView、SMS受信ボックスからのすべての会話を表示するメインアクティビティにを含むSMSアプリを作成しています。各行ListViewには、電話番号、メッセージ本文、メッセージの時刻とともに1つの会話が表示されます。ここで、電話番号の代わりに、連絡先の名前が存在する場合はそれを表示したいと思います。

これまでのところ、電話番号で連絡先の名前を取得するために、このコードを見つけました

private String getDisplayNameByNumber(String number) {
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));

    Cursor contactLookup = context.getContentResolver().query(uri, new String[] {ContactsContract.PhoneLookup._ID,
                                            ContactsContract.PhoneLookup.DISPLAY_NAME }, null, null, null);

    int indexName = contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME);

    try {
        if (contactLookup != null && contactLookup.moveToNext()) {
            number = contactLookup.getString(indexName);
        }
    } finally {
        if (contactLookup != null) {
            contactLookup.close();
        }
    }

    return number;
}

ただし、連絡先名ごとに個別にクエリを実行する必要があり、アプリに遅れをとるため、これは非効率的なようです。そこで、代わりに、電話からすべての連絡先名を取得し、電話番号をキーとして、連絡先名を値としてに保存しようとしました。HashMapこれにより、からいつでも連絡先名を取得できますHashMap。しかし、別の問題があるようです。電話番号は、次のようにさまざまな形式で保存されます。

+91 4324244434
04324244434
0224324244434

HashMapそれでは、電話番号はさまざまな形式で保存できるため、どのように検索すればよいでしょうか。

4

1 に答える 1

0

に連絡先を追加する前に、HashMap正規表現を使用して電話番号を取得します。このように、電話番号の形式に関係なく、正規表現は必要な適切な番号を取得できます。

番号を取得したら、それにHashMap応じて番号を追加します。

それがあなたの質問に答えることを願っています。

于 2013-01-25T15:45:27.957 に答える