android - 在 Android 日历中插入多个事件

标签 android events 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);

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

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

        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);

它会插入我的事件,但不会重复发生。我的意思是我的 Activity 出现在 2012 年 1 月 2 日,但 2013 年 1 月 2 日没有,2014 年也没有,依此类推。所以我在手机上打开我的日历并尝试编辑我的事件,我看到我应该在哪里选择它的发生,它显示在 2012 年 1 月 2 日而不是 1 月 2 日,如果它是从我的自定义我的事件应该电话。另一方面,如果我尝试从我的手机手动添加一个事件,它工作得很好(我的意思是我可以添加一个每年发生的事件)。

最佳答案

android SDK 没有公开任何操作日历的接口(interface),但您可以从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;
}

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

关于android - 在 Android 日历中插入多个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8688837/

相关文章:

java - CalenderView 不存在 - 试图实现 DatePickerDialog

Android Drawable Layer 列表项颜色访问

javascript - 使用jquery以编程方式触发ionic 3元素的点击事件

android - 如果有日历事件更新,如何从 Android 设备获取信息?

events - 为什么在编译 VB6 应用程序期间会触发事件?

swift - 通过进程 ID 将 KeyEvent 发送到目标窗口

jsf - RichFaces 4.5.2.Final Calendar 页面片段破坏了 4.5.1 成功的 Arquillian 单元测试

android - openCV Android 相机方向

android - 如何在不阻塞 Activity 的情况下在 AsyncTask 中创建 while(true)?

android - 抽屉导航,概念问题