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()); } } }
マニフェストファイルにパーミッションを追加する。
ログ情報が多いため、テキストビューをスクロールさせる。