2012/06/24

Android で電話帳から選択した人の電話番号一覧を取得するサンプル。

デスマって凄いですね。
どうもこんにちは。

Android のいいところ Intent 連携。
そんな便利機能で電話帳と連携して、選択した人の電話番号を取得したい。

ただし選択した人の電話番号が一つとは限らない。
Google 先生に聞いてみたら一つだけ取得するサンプルは結構あるんだけど、
そこから全件取得するってのはなかった(と思う)。

なのでこしらえた。
対象は Android 2.x 以上。 ICS も行けるかと思う(実機では試してない)。
  1. [連絡先]ボタンをクリックしたら、[電話帳]が開く。
  2. [電話帳]から任意に選択する。
  3. 選択された人が複数電話番号を持っていたら、ダイアログを表示して選択する。
  4. 選択した電話番号を表示する。
こんな流れ。

AndroidManifest.xml には以下のパーミッションの追記を忘れずに。
<uses-permission android:name="android.permission.READ_CONTACTS"/>

レイアウトファイルはどうでもいいけど・・・。


表示名を取得して、その表示名をキーにもう一回検索かけてと・・・。
なんか回りくどい。いい方法無いかな・・・。

まあ、なんで ICS も行けると思うって書いたかというと、
ContentResolver#query()
って書いたとこ。
Activity#managedQuery()にしてたんだけど API Level 15 から deprecated になったみたいで、
使わないほうがいいらしい。
ココらへんもググった情報の多くは managedQuery 使ってるサンプルが多かった。

とりあえず ContentResolver#query() にしてお茶を濁して、
Froyo 以降を対象にした場合の最適解があればそちらに移行しようかと。
コンテンツプロバイダーがなんかややこしくてわかりづらいのはぼくだけ・・・?

手持ちの Galaxy S 2.3.6 ではとりあえず動いてます。