2011-01-05 13 views
3

レッツ・ブルートフォースあなたの庭、さまざまなアンドロイド2.xの可視連絡先のID /名前のカーソル(経由ContactsContract): メールアドレスや電話番号でAndroid 2.x連絡先に問い合わせる方法は?

Cursor c = getContentResolver().query(
    Contacts.CONTENT_URI, 
    new String[] { Contacts._ID, Contacts.DISPLAY_NAME }, 
    Contacts.IN_VISIBLE_GROUP + " = '1'", 
    null, 
    Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC" 
); 

は、少なくとも1通の電子メールを持っている連絡先を取得するには、これをフィルタリングする方法はありますおよび/または電話番号?

私はContacts.HAS_PHONE_NUMBERを使用できることがわかり...しかし、私はHAS_EMAILどこにも表示されません。 (これは醜くならないと教えてください)

答えて

4

Uriに問い合わせてください。例えば、android.provider.ContactsContract.CommonDataKinds.Emailは、電子メールアドレスを取得することができますし、あなたの他の列(例えば、IN_VISIBLE_GROUP)は、暗黙的に結合されている。

Here is a sample projectこれらの他のコンテンツプロバイダウリ値を使用して示しています。

+0

マークが届きます!どうもありがとう。私はスピナーをスピンします。しかし、私は明確にすべきです。私はいつも個別に連絡先を歩くことができることを知っていますが、私はフィルタリングされたリストを一挙に取得しようとしています。 –

+0

@Joe D'Andrea:「フィルタリングされたリストを一挙に取得しようとしていますが...」というサンプルは、私が提供したものです。 'CommonDataKinds.Email'のような"二次的な ""テーブル "をクエリするときに、' ContactsContract'コンテンツプロバイダが提供する暗黙的な結合を利用する必要があります。 – CommonsWare

+0

パーフェクト。それは私が紛失していることです - 暗黙的な結合。 –

0

私はちょうどそのようなコンタクトのフェッチカーソルの列を列挙:

Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
String[] names = c.getColumnNames(); 
for (String string : names) { 
    Log.d("ContactList", "RC column " + string); 
} 
c.close(); 

を結果はhas_emailが含まれています。しかし、それは銀河のタブに特有のものかもしれません。

関連する問題