在android 4中如何在没有Intent的情况下静默添加日历事件到默认日历?

oik*_*opo 25 java android android-calendar

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

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

oik*_*opo 39

是我最终做到的一个工作示例:

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);
Run Code Online (Sandbox Code Playgroud)

这里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());
Run Code Online (Sandbox Code Playgroud)

参考: Recurrence Rule

  • 格式不应该是"yyyyMMdd"而不是"yyyymmdd"吗?"m"表示根据此分钟:http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html (3认同)
  • CALENDAR_ID = 1 事件必须是 2,生日事件必须是 3...谢谢 (2认同)

Vel*_*tas 16

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


来自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);
Run Code Online (Sandbox Code Playgroud)

  • 不,我想以编程方式添加此事件.如http://stackoverflow.com/questions/7859005/how-to-read-and-edit-android-calendar-events-using-the-new-android-4-0 -冰淇淋 (3认同)

Nik*_*dva 5

不要忘记在清单中添加权限

<uses-permission android:name="android.permission.READ_CALENDAR"/>
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>
Run Code Online (Sandbox Code Playgroud)

代码来自:-> Android 开发站点

long calID = 3; // Make sure to which calender you want to add event 
long startMillis = 0;
long endMillis = 0;
Calendar beginTime = Calendar.getInstance();
beginTime.set(2012, 9, 14, 7, 30);
startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2012, 9, 14, 8, 45);
endMillis = endTime.getTimeInMillis();


ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(Events.DTSTART, startMillis);
values.put(Events.DTEND, endMillis);
values.put(Events.TITLE, "Hackathon");
values.put(Events.DESCRIPTION, "do some code");
values.put(Events.CALENDAR_ID, calID);
values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
Uri uri = cr.insert(Events.CONTENT_URI, values);

// get the event ID that is the last element in the Uri
long eventID = Long.parseLong(uri.getLastPathSegment());
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

44394 次

最近记录:

6 年,11 月 前