最終更新:
moonlight_aska 2014年02月16日(日) 10:23:43履歴
電話番号やメールアドレスなどのコンタクトリストを取得するには, コンタクトコントラクト(ContactsContract)クラスとコンテントリゾルバ(ContentResolver)クラスを利用する. (API Level5以降)


- MainActivity.java
- getContentResolverメソッドで, ContentResolverのインスタンスを取得する.
- ContentResolver#queryメソッドで, 第1引数に"ContactsContract.Contacts.CONTENT_URI"を指定して, コンタクトリストを取得する.
- Cursor#getCountメソッドで, データベースにヒットした件数を取得する.
- Cursor#getColumnIndexメソッドで, 項目を指定してデータを取得する.
- 電話番号/メールアドレスは複数保持可能な構成になっているので, ContentResolver#queryメソッドで, 第1引数に"ContactsContract.CommonDataKinds.Phone.CONTENT_URI"または"ContactsContract.CommonDataKinds.Email.CONTENT_URI"を指定し, 第3引数にidを指定して, データを取得する.
- Cursor#closeメソッドで, クローズする.
package com.moonlight_aska.android.contactlist;
import java.util.Arrays;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
public class MainActivity extends Activity {
ArrayAdapter<String> mAdapter = null;
ContentResolver mCResolver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
// コンタクトリストの取得
mCResolver = getContentResolver();
Cursor cursor = mCResolver.query(
ContactsContract.Contacts.CONTENT_URI, // データの種類
null, // 項目(null 全項目)
null, // フィルタ条件(null フィルタなし)
null, // フィルタ用パラメータ
null // ソート
);
Log.v("CONTACT", Arrays.toString(cursor.getColumnNames())); // 項目名一覧
Log.v("CONTACT", "Num = " + cursor.getCount() ); // 取得件数
if (cursor.moveToFirst()) {
String id;
String info;
do {
// ID
id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
// 名前
info = "名前:" + cursor.getString(cursor.getColumnIndex("display_name"));
// 電話番号
info += getPhoneNumber(id);
// メールアドレス
info += getEmailData(id);
// アダプターに追加
mAdapter.add(info);
} while (cursor.moveToNext());
}
cursor.close();
ListView listView = (ListView)findViewById(R.id.listview);
listView.setAdapter(mAdapter);
}
// IDから電話番号を取得
private String getPhoneNumber(String id) {
String phones = "";
Cursor cursor = mCResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id,
null,
null
);
if (cursor.moveToFirst()) {
do {
phones += "\n" + cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
} while (cursor.moveToNext());
}
cursor.close();
return phones;
}
// IDからメールアドレスを取得
private String getEmailData(String id) {
String emails = "";
Cursor cursor = mCResolver.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + "=" + id,
null,
null
);
if (cursor.moveToFirst()) {
do {
emails += "\n" + cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
} while (cursor.moveToNext());
}
cursor.close();
return emails;
}
}
- AndroidManifest.xml
- "android.permission.READ_CONTACTS"パーミッションを設定する.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.moonlight_aska.android.contactlist"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.moonlight_aska.android.contactlist.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
- 動作例


コメントをかく