在Android日历中插入多个事件

Lar*_*ara 7 events android calendar

我在找到解决问题的方法时遇到了麻烦.我想在我的Android日历中添加多个事件,但我不知道如何.我给了这个代码:

        Calendar cal = Calendar.getInstance();              
            Intent intent = new Intent(Intent.ACTION_EDIT);
            intent.setType("vnd.android.cursor.item/event");
            intent.putExtra("beginTime", cal.getTimeInMillis());
            intent.putExtra("allDay", true);
            intent.putExtra("rrule", "FREQ=YEARLY");
            intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000);
            intent.putExtra("title", "A Test Event from android app"+String.valueOf(i));
            startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

但它只是将我发送到我的日历,让我编辑并手动插入我的活动.我想自动插入事件,而无需转到我的日历应用程序.而且,我只能使用此代码添加一个事件.这不是我想要的.我有2个String数组,一个包含日期,另一个包含事件的名称.有谁知道有没有办法做到这一点?我一直在寻找解决方案很长一段时间没有找到解决方案.如果有人帮助过我,我将不胜感激.谢谢!

我已经解决了这个问题!非常感谢你!但现在我有另一个我无法解决的问题.我有这个代码:

        ContentValues cv = new ContentValues();
        cv.put("calendar_id", calIds[0]);
        cv.put("title", title);
        //cv.put("dtstart", dtstart );
        //cv.put("dtend", dtend);
        cv.put("rrule", "FREQ=MONTHLY");
        cv.put("description", comment );
        Calendar start = Calendar.getInstance();
        start.set(2012, 0, 2, 8, 0, 0);

        Calendar end = Calendar.getInstance();
        end.set(2012, 0, 2, 9, 0, 0);

        long startTime = start.getTimeInMillis();       
        long endTime = end.getTimeInMillis();

        cv.put("dtstart", startTime);
        cv.put("dtend", endTime);
        //Insertion on the events of the calendar
        cr.insert(Uri.parse("content://com.android.calendar/events"), cv);
Run Code Online (Sandbox Code Playgroud)

它会插入我的事件,但它不会重复出现.我的意思是我的活动出现在2jan2012但是在2jan2013上没有,2014年也没有,依此类推.所以我在手机上打开了我的日历,并尝试编辑我的活动,我看到我应该选择它的出现位置,它显示在2012年1月2日而不是1月2日,因为它应该从我的自定义我的活动电话.另一方面,如果我尝试从手机手动添加事件,它可以正常工作(我的意思是我可以添加每年发生的事件).

hag*_*ago 5

android SDK不公开任何接口来操纵日历,但你可以从android源代码中找到它.Android将日历存储在内部sqlite数据库中,虽然它可以防止直接访问,但您仍然可以通过ContentResolver添加/删除/更新/查询日历数据.插入事件的一段代码可能是这样的:

public String addEvent(String calendarId, String title, long startTime,
        long endTime, int allDay) {
    ContentValues event = new ContentValues();
    event.put("calendar_id", calendarId); // "" for insert
    event.put("title", title);
    event.put("description", "");
    event.put("eventLocation", "");
    event.put("allDay", allDay);
    event.put("eventStatus", 1);
    event.put("transparency", 0);
    event.put("dtstart", startTime);
    event.put("dtend", endTime);

    ContentResolver contentResolver = this.context.getContentResolver();
    Uri eventsUri = Uri.parse("content://com.android.calendar/calendars");
    Uri url = contentResolver.insert(eventsUri, event);
    String ret = url.toString();
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

成功插入一个事件时,一个字符串表示ContentResolver.insert返回事件的uri,您可以稍后查询,更新或删除它.在SDK 8之前的早期SDK中,日历的内容uri是"content:// calendar/calendars",它与SDK 8及之后不同.
同时,要小心那些自定义的roms.由于SDK文档中未记录日历API,因此某些供应商和运营商可能会修改甚至删除日历提供程序,因此您可能必须针对大量设备测试您的应用程序.
祝好运!