読者です 読者をやめる 読者になる 読者になる

ContentResolver

Androidアプリ上で扱う写真や、動画、音声ファイル、電話帳、ブックマークなどあらゆるデータの情報はAndroid内部のDBに登録されている・・・。
このDBにアクセスするには、ContentResolverを使う・・・。

ContentResolver | Android Developers

今回は、電話帳データにアクセスして、名前を列挙する・・・。

activity_main.xmlは、

ListViewを配置・・・。
ということはアイテムのクラスとアダプタのクラスが必要・・・。

f:id:BG1:20161017184637p:plain

Classの追加・・・。

f:id:BG1:20161017184705p:plain

ListItemクラス・・・。

住所や電話番号なども列挙したかったが、取り出し方が面倒なので、今回は名前だけ・・・。

f:id:BG1:20161017184910p:plain

XMLを追加・・・。

f:id:BG1:20161017184941p:plain

list_itemにアイテムのレイアウトを書く・・・。

名前のTextViewだけ・・・。
アダプタを追加する・・・。

f:id:BG1:20161017185147p:plain

ArrayAdapter<ListItem>派生のListItemAdapter・・・。

Viewの表示が要求されたら名前のTextViewに取得した名前を表示・・・。

MainActivityでは、getContentResolverでcontentResolverを取得・・・。
contentResolver.queryには取得したいデータをURIやクエリで指定する・・・。
(実体はSQLiteDatabaseなので、SQL的な感じで条件を指定・・・。)
ContactsContract.Contacts.CONTENT_URIは連絡先のURIを指すマクロ・・・。
今回は全部取得するので、条件はすべてnull・・・。
あとはContactsContract.Contacts.DISPLAY_NAMEが表示名のカラムを指すので、これを取り出し、listitemsに追加していく・・・。

f:id:BG1:20161017190526p:plain

"あかさ5"と"山田太郎22"が存在するか見てみる・・・。

f:id:BG1:20161017190614p:plain

"あかさ5"があった・・・。しかも2つ・・・。
(他のメールとか同期しているために、大量の名前が出てきたが個人情報なので伏せている・・・。
隠していないのは適当に作ったテスト連絡先・・・。)

f:id:BG1:20161017190831p:plain

"山田太郎22"もいた・・・。

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