queryメソッドには引数が5つあり、それぞれ以下を指定する。
1(アクセスするデータ):CallLog.Calls.CONTENT_URI
2(取得するデータ):null
3(データの制限):null
4(第3引数の追加情報):null
5(データの順番):CallLog.Calls.DEFAULT_SORT_ORDER
第2引数に「null」を指定することで、すべてのデータを取得できる。
package net.kuttya.calllog;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.CallLog;
import android.widget.TextView;
public class CallLogSampleActivity extends Activity {
TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// テキストビュー
textView = (TextView)findViewById(R.id.callLogText);
textView.setText("");
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DEFAULT_SORT_ORDER);
if(cursor.moveToFirst()) {
do {
// 通話先
String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));
if(name == null) {
name = "登録なし";
}
// 電話番号
String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
// 日時
Date datetime = new Date(cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)));
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd (EEE) HH:mm:ss");
String datetimeStr = format.format(datetime);
// 通話種別
String calltype = cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE));
if(calltype.equals("1")) {
calltype = "着信";
}
else if(calltype.equals("2")) {
calltype = "発信";
}
else if(calltype.equals("3")) {
calltype = "不在着信";
}
// 出力
textView.append(datetimeStr + ":" + calltype + "\n" + name + "(" + number + ")\n");
textView.append("----------\n");
} while(cursor.moveToNext());
}
}
}
マニフェストファイルにパーミッションを追加する。
ログ情報が多いため、テキストビューをスクロールさせる。
