web-dev-qa-db-ja.com

電話番号で連絡先を検索

私のアプリでは、ユーザーが電話番号を書いていて、その電話番号の連絡先名を見つけたいのですが?

私は通常、次のように連絡先を検索します。

Cursor cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
            null, null, null, null);

しかし、私はすべての連絡先にアクセスするためにこれを行います...このアプリでは、特定の電話番号の連絡先名のみを取得したいのですが...クエリを制限するにはどうすればよいですか?

または、すべての連絡先を調べて、指定された電話番号があるかどうかを確認する必要がありますか?しかし、これはこの方法では非常に遅くなると信じています...

29
Tiago Costa

推奨される ContactsContract.PhoneLookup プロバイダーを確認する必要があります

発信者IDなど、電話番号を検索した結果を表すテーブル。検索を実行するには、検索する番号をCONTENT_FILTER_URIに追加する必要があります。このクエリは高度に最適化されています。

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...
33
Pentium10

完全なコードが必要な場合:

public String getContactDisplayNameByNumber(String number) {
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
    String name = "?";

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

    try {
        if (contactLookup != null && contactLookup.getCount() > 0) {
            contactLookup.moveToNext();
            name = contactLookup.getString(contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
            //String contactId = contactLookup.getString(contactLookup.getColumnIndex(BaseColumns._ID));
        }
    } finally {
        if (contactLookup != null) {
            contactLookup.close();
        }
    }

    return name;
}
86
Felipe