ContactsContract

ContentResolverで連絡帳から名前を取り出してリスト表示するということはできたが、
電話番号やメールアドレスは取り出し方が面倒なので避けていた・・・。

今回はContactsContractに定義された定数を使って、電話番号、メールアドレスも取り出していく・・・。

ContactsContract | Android Developers

まず、activity_main.xmlは、

相変わらずListViewだけ・・・。

list_item.xmlは、

list_item_nameに加えて、list_item_phonenumber、list_item_emailaddressというTextViewを追加・・・。

ListItem.javaも、

phoneNumberとemailAddressを追加・・・。

ListItemAdapter.javaも、

phoneNumberをtvphonenumberに、emailAddressをtvemailaddressにセット・・・。

MainActivity.javaでは、

表示名の前にContactsContract.Contacts._IDでIDを取っている・・・。
このIDを使って、電話番号とメールアドレスを取り出す・・・。

電話番号は複数ある場合が考えられるので、phoneNumberListに";"区切りで連結して入れていく・・・。
新たにphoneCursorというCursorを用意しておいて、contentResolver.queryでContactsContract.CommonDataKinds.Phone.CONTENT_URIとContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + idを指定する・・・。
つまり、電話番号の中で、先ほどのIDに紐づけられた電話番号を絞り込むということ・・・。
あとは、phoneCursorでContactsContract.CommonDataKinds.Phone.NUMBERを順次取出し、phoneNumberListに追加・・・。

同様に、メールアドレスも複数あるので";"区切りでemailAddressListに追加していく・・・。

あとは、phoneNumberListをitem.phoneNumberに、emailAddressListをitem.emailAddressに代入して、itemをlistitemsに追加・・・。

ContentResolverの回で書くのを忘れてたけど、連絡帳へのアクセスには、READ_CONTACTSのパーミッションが必要なので忘れずに・・・。

f:id:BG1:20161211134953p:plain

連絡帳でテスト用のアカウントを作成・・・。
名前に加えて、電話番号を2つ・・・。

f:id:BG1:20161211135047p:plain

メールアドレスも2つセット・・・。

f:id:BG1:20161211135108p:plain

あとはこれを起動すると、

f:id:BG1:20161211135125p:plain

最後にテストアカウントが追加されている・・・。
電話番号、メールアドレスが2つずつ表示されている・・・。

Sample/android/ContactsContract/ContactsContract/src/ContactsContract at master · bg1bgst333/Sample · GitHub