カレンダーからイベントを取得するには

イベントの取得は電話帳の取得と基本的には同じ


// イベント取得用URLをセット
Uri eventUri = Uri.parse("content://calendar/events");


Cursor eventCursor = managedQuery(
    eventUri,
    new String[]{"dtstart","title","allDay"},
    null,
    null,
    "dtstart asc");

eventCursor.moveToFirst(); // 最初のイベントに移動
for (int i = 0; i < eventCursor.getCount(); i++) {
	// ログにイベントタイトルを出力
	Log.d("event", eventCursor.getString(1)); 
	eventCursor.moveToNext(); // 次のイベントに移動
}
				

上記のコードで全てのイベントを開始日時の昇順で取得できる。


// イベント取得用URLをセット
Uri eventUri = Uri.parse("content://calendar/events");

// 開始日付を取得
Calendar cal = Calendar.getInstance(); // 現在日時を取得
cal.set(Calendar.MONTH,10); // 11月を指定
cal.set(Calendar.DAY_OF_MONTH,22); // 22日を指定
cal.set(Calendar.HOUR_OF_DAY, 0); // 時を0でクリア
cal.set(Calendar.MINUTE, 0); // 分を0でクリア
cal.set(Calendar.SECOND, 0); // 秒を0でクリア
cal.set(Calendar.MILLISECOND, 0); // ミリ秒を0でクリア
Long startMillis = cal.getTimeInMillis(); // Long値へ変換

// 終了日付を取得
cal.add(Calendar.DATE, 7); // 7日後を計算
Long stopMillis = cal.getTimeInMillis(); // Long値へ変換
// 開始日付と終了日付をパラメータ配列にセット
String[] params = new String[]{"" + startMillis, "" + stopMillis };
				
Cursor eventCursor = managedQuery(
	eventUri,
	new String[]{"dtstart","title","allDay"},
	"allDay = 0 and dtstart >= ? and dtstart < ?",
	params,
	"dtstart asc");
				
		

条件を絞り込む場合は上記のコードのようにする。
開始日時が11月22日~11月28日かつ終日イベントではないイベントを取得しています。

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

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