電話帳からメールアドレスを取得するにはAndroid1.6以前

メーラーアプリを作るにあたり登録されている連絡先を取得し 一覧表示しなければならなかったので下のように記述した。

// 連絡先を取得
Cursor cursor = managedQuery(
	People.CONTENT_URI,
	null,
	null,
	null,
	null);

// 連絡先をリストに格納
ArrayList<String> str = new ArrayList<String>();
ArrayList<String> ids = new ArrayList<String>();
while(cursor.moveToNext()){
	ids.add(cursor.getString(cursor.getColumnIndex(People._ID)));
	str.add(cursor.getString(cursor.getColumnIndex(People.DISPLAY_NAME)));
}

// 連絡先を表示
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
	this,
	android.R.layout.simple_list_item_1,
	str);
ListView.setAdapter(adapter);
		

上記コードを実行すると連絡先の並びがバラバラなうえに、 メールアドレスが登録されていない人も表示される。
そこで取得条件にはメールアドレスが登録されている人、 並び順は履歴順になるよう下のように変更した。

// 連絡先を取得
String where_str = People.PRIMARY_EMAIL_ID + " IS NOT NULL ";
String order_str = People.LAST_TIME_CONTACTED + " DESC";
Cursor cursor = managedQuery(
	People.CONTENT_URI,
	null,
	where_str,
	null,
	order_str);

// 連絡先をリストに格納

~(省略)~
		

これでメールアドレスが登録されていて、かつ履歴順に連絡先一覧を表示することができた。
履歴順になるよう2行目でPeople.LAST_TIME_CONTACTEDを使っているが、People.PHONETIC_NAME を使うと名前順に並べることができる。

電話帳へアクセスするにはマニフェストにパーミッションを記述し忘れないよう注意してください。

<uses-permission android:name="android.permission.READ_CONTACTS"/>