カレンダーからイベントを取得するには
イベントの取得は電話帳の取得と基本的には同じ
// イベント取得用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" />