android - 在 Android 中的特定日期创建日历事件?

标签 android date datetime android-calendar

我有一个特定的要求,即创建一个将在特定日期发生的日历事件。这不是每周、每月、每年都会发生的情况,但它可能会持续 13 天、14 天、15 天等。我知道它会发生的日期,但未能设置重复日期。下面是我的代码

ContentValues calEvent = new ContentValues();
            calEvent.put(CalendarContract.Events.CALENDAR_ID, 1);
            calEvent.put(CalendarContract.Events.TITLE, title);
            calEvent.put(CalendarContract.Events.DTSTART, d.getTime());
            calEvent.put(CalendarContract.Events.DTEND, d.getTime()
                    + (2 * 60 * 60 * 1000));
            calEvent.put(CalendarContract.Events.HAS_ALARM, 1);
            calEvent.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone
                    .getDefault().getID());
            calEvent.put(CalendarContract.Events.EVENT_LOCATION, location);
            calEvent.put(CalendarContract.Events.DESCRIPTION, description);
            calEvent.put(CalendarContract.Events.RDATE, sdf1.format(d)
                    + "T033000Z");
            // calEvent.put(CalendarContract.Reminders.RRULE, value);
            Uri uri = contentResolver.insert(
                    CalendarContract.Events.CONTENT_URI, calEvent);

            // The returned Uri contains the content-retriever URI for the
            // newly-inserted event, including its id
            int id = Integer.parseInt(uri.getLastPathSegment());
            // Toast.makeText(ctx, "Created Calendar Event " + id,
            // Toast.LENGTH_SHORT).show();
            eventId = eventId + (eventId.equalsIgnoreCase("") ? id : "," + id);
            ContentValues calReminder = new ContentValues();

            calReminder.put(CalendarContract.Reminders.MINUTES, minutes);
            calReminder.put(CalendarContract.Reminders.EVENT_ID, id);
            // calReminder.put(CalendarContract.Reminders.HAS_ALARM, 1);
            calReminder.put(Reminders.METHOD, Reminders.METHOD_ALERT);
            Uri uri1 = contentResolver.insert(
                    CalendarContract.Reminders.CONTENT_URI, calReminder);

            // The returned Uri contains the content-retriever URI for the
            // newly-inserted event, including its id
            int id1 = Integer.parseInt(uri1.getLastPathSegment());
            // Toast.makeText(ctx, "Created Calendar Reminder " + id1,
            // Toast.LENGTH_SHORT).show();
            reminderId = reminderId
                    + (reminderId.equalsIgnoreCase("") ? id1 : "," + id1);

当我将 RDATE 与逗号分隔的日期值一起使用时,因为提供了开始日期和结束日期,将为开始日期和结束日期之间的所有日期创建事件。

最佳答案

Intent service_intent = new Intent(your application context,
                            your class.class);

                    PendingIntent pintent = PendingIntent.getService(
                            your application context, 0, service_intent, 0);

                    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                    // for 30 mint 60*60*1000
                    alarm.setRepeating(AlarmManager.RTC_WAKEUP,
                            cal.getTimeInMillis(), APP_DAY_FOR_SERVICE
                                    * APP_HOUR_FOR_SERVICE
                                    * APP_MINUT_FOR_SERVICE
                                    * APP_SECOND_FOR_SERVICE * 1000,
                            pintent);

在此代码中,24 小时后将调用一个事件,因此如果您将 APP_DAY_FOR_SERVICE 更改为 2,则 48 小时后事件将是老虎,因此如果您想在特定日期之后调用事件,例如您从日历中选择日期,那么当天的分钟数当天并在 APP_DAY_FOR_SERVICE 中输入答案即可

APP_DAY_FOR_SERVICE APP_HOUR_FOR_SERVICE APP_MINUT_FOR_SERVICE 这些都是整数 如果你有任何疑问可以随时问

关于android - 在 Android 中的特定日期创建日历事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24358669/

相关文章:

java - 旧日期格式与 Java 8 ZonedDateTime API 不兼容

java - 如何使用准备好的语句设置当前日期和时间?

javascript - 将 C# 日期转换为 Javascript

Android:如何为暗模式切换主题?

android - 如何在 Intellij 中加快 Android 项目的构建速度?

ruby-on-rails - 国际化的 Rails ActiveRecord 日期解析(特别是欧洲日期格式)

javascript - 将带有 AM/PM 的日期字符串转换为 javascript 日期对象

android - Android 中带低通滤波器的加速度计

android - 它是如何工作的 : passing an abstract class as parameter in Room Database builder

entity-framework - 将 EF CTP5 与 Sql Server Compact Edition 4.0 一起使用时的 EntityFunctions.TruncateTime 替代方案