如何在Android 4中将日历事件添加到默认日历,没有意图的静默?

2022-09-01 12:32:28

我想在 android 4+ 中以编程方式(直接)添加日历事件。是否可以在模拟器上进行测试?我没有安卓手机。一些示例代码将不胜感激。我阅读了Android开发人员的日历提供商,但我感到困惑。如何将事件添加到用户的默认日历?我不需要同步。

编辑:我不想启动添加 Intent 的事件。相反,我想完全从代码中添加它们,而不是启动另一个活动。我需要能够在模拟器上测试事件是否会添加到设备默认用户的主日历中。如何设置模拟器以查看用户的默认日历?


答案 1

以下是我最终制作它的工作示例:

ContentResolver cr = ctx.getContentResolver();
ContentValues values = new ContentValues();
    
values.put(CalendarContract.Events.DTSTART, dtstart);
values.put(CalendarContract.Events.TITLE, title);
values.put(CalendarContract.Events.DESCRIPTION, comment);

TimeZone timeZone = TimeZone.getDefault();
values.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID());

// Default calendar
values.put(CalendarContract.Events.CALENDAR_ID, 1);

values.put(CalendarContract.Events.RRULE, "FREQ=DAILY;UNTIL="
        + dtUntill);
// Set Period for 1 Hour
values.put(CalendarContract.Events.DURATION, "+P1H");

values.put(CalendarContract.Events.HAS_ALARM, 1);

// Insert event to calendar
Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);

在哪里dtuntil

SimpleDateFormat yyyyMMdd = new SimpleDateFormat("yyyyMMdd");
Calendar dt = Calendar.getInstance();

// Where untilDate is a date instance of your choice, for example 30/01/2012
dt.setTime(untilDate);

// If you want the event until 30/01/2012, you must add one day from our day because UNTIL in RRule sets events before the last day
dt.add(Calendar.DATE, 1);
String dtUntill = yyyyMMdd.format(dt.getTime());

参考:重复规则


答案 2

我相信您要查找的部分是使用意图插入事件。在本节中,它介绍如何为要添加的事件创建目的,然后模拟器上的默认日历程序将响应并添加它。您可能必须设置一个虚拟配置文件,以便日历程序在您实际希望看到它接收到正确的信息时将启动。


来自 Android Dev Site 的代码

Calendar beginTime = Calendar.getInstance();
beginTime.set(2012, 0, 19, 7, 30);
Calendar endTime = Calendar.getInstance();
endTime.set(2012, 0, 19, 8, 30);
Intent intent = new Intent(Intent.ACTION_INSERT)
    .setData(Events.CONTENT_URI)
    .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis())
    .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis())
    .putExtra(Events.TITLE, "Yoga")
    .putExtra(Events.DESCRIPTION, "Group class")
    .putExtra(Events.EVENT_LOCATION, "The gym")
    .putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY)
    .putExtra(Intent.EXTRA_EMAIL, "rowan@example.com,trevor@example.com");
startActivity(intent);

推荐