CalendarContract.Events.CALENDAR_ID 未使用 Intent 在 Android 中指定的 Calendar_Id 中存储事件

CalendarContract.Events.CALENDAR_ID not storing the event in the specified Calendar_Id in Android, using Intent

您好,我正在使用以下代码通过 Intent 将事件添加到我的 Android 日历。

Calendar cal = Calendar.getInstance();
        Intent intent = new Intent(Intent.ACTION_INSERT); // Even Tried Intent.ACTION_EDIT
        intent.setType("vnd.android.cursor.item/event");
        intent.putExtra("beginTime", cal.getTimeInMillis());
        intent.putExtra("allDay", false);
        intent.putExtra("rrule", "FREQ=DAILY");
        intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000);
        intent.putExtra("title", mtodoText);
        intent.putExtra(CalendarContract.Events.CALENDAR_ID,3);
        startActivity(intent);

但问题是此事件未保存或创建到 Calendar_Id = 3,但尽管它创建到 calendar_Id = 1。 我正在使用以下代码检索我的所有日​​历事件,如果我检查日志 cat 输出,它显示事件是在 Calendar_Id 1.

中创建的
Uri EVENTS_URI = Uri.parse(getCalendarUriBase(true) + "events");
        String sSelection = "((" +  CalendarContract.Events.DELETED + " != 1))";

        /*String sSelection = "((" + CalendarContract.Events.CALENDAR_ID + " = 3 ) AND ("
                +  CalendarContract.Events.DELETED + " != 1))";*/

        cur = getActivity().getContentResolver().query(EVENTS_URI, null, sSelection, null, "_id");

        if(cur!=null){
            while (cur.moveToNext()) {
                String taskname=cur.getString(cur.getColumnIndex(CalendarContract.Events.TITLE));
                String taskdate=cur.getString(cur.getColumnIndex(CalendarContract.Events.DTSTART));
                String s_id=cur.getString(cur.getColumnIndex(CalendarContract.Events._ID));
                String taskstatusflag=cur.getString(cur.getColumnIndex(CalendarContract.Events.HAS_ALARM));

                Log.e("Title:", "taskname: " + taskname);
                Log.e("DTSTART","taskdate: " + taskdate);
                Log.e("_ID","s_Id: "+ s_id);
                Log.e("HAS ALARM", "taskstatusflag: " + taskstatusflag);
                Log.e("Calender ID:",cur.getString(cur.getColumnIndex(CalendarContract.Events.CALENDAR_ID))+"");
}
}

我的Logcat输出如下:-

05-31 17:17:54.039    6518-6518/com.myapp E/Title:﹕ taskname: test1
        05-31 17:17:54.039    6518-6518/com.myapp E/DTSTART﹕ taskdate: 1464608459000
        05-31 17:17:54.039    6518-6518/com.myapp E/_ID﹕ s_Id: 22162
        05-31 17:17:54.039    6518-6518/com.myapp E/HAS ALARM﹕ taskstatusflag: 0
        05-31 17:17:54.039    6518-6518/com.myapp E/Calender ID:﹕ 1
        05-31 17:17:54.039    6518-6518/com.myapp E/Title:﹕ taskname: test Cal 3
        05-31 17:17:54.039    6518-6518/com.myapp E/DTSTART﹕ taskdate: 1464684678000
        05-31 17:17:54.039    6518-6518/com.myapp E/_ID﹕ s_Id: 22163
        05-31 17:17:54.039    6518-6518/com.myapp E/HAS ALARM﹕ taskstatusflag: 0
        05-31 17:17:54.039    6518-6518/com.myapp E/Calender ID:﹕ 1
        05-31 17:17:54.039    6518-6518/com.myapp E/Title:﹕ taskname: test guest
        05-31 17:17:54.039    6518-6518/com.myapp E/DTSTART﹕ taskdate: 1464694253000
        05-31 17:17:54.039    6518-6518/com.myapp E/_ID﹕ s_Id: 22164
        05-31 17:17:54.039    6518-6518/com.myapp E/HAS ALARM﹕ taskstatusflag: 0
        05-31 17:17:54.039    6518-6518/com.myapp E/Calender ID:﹕ 1
        05-31 17:17:54.039    6518-6518/com.myapp E/Title:﹕ taskname: test Cal 3
        05-31 17:17:54.039    6518-6518/com.myapp E/DTSTART﹕ taskdate: 1464694676000
        05-31 17:17:54.039    6518-6518/com.myapp E/_ID﹕ s_Id: 22165
        05-31 17:17:54.039    6518-6518/com.myapp E/HAS ALARM﹕ taskstatusflag: 0
        05-31 17:17:54.039    6518-6518/com.myapp E/Calender ID:﹕ 1
        05-31 17:17:54.039    6518-6518/com.myapp E/Title:﹕ taskname: test Cal 33
        05-31 17:17:54.039    6518-6518/com.myapp E/DTSTART﹕ taskdate: 1464695268000
        05-31 17:17:54.039    6518-6518/com.myapp E/_ID﹕ s_Id: 22166
        05-31 17:17:54.039    6518-6518/com.myapp E/HAS ALARM﹕ taskstatusflag: 0
        05-31 17:17:54.039    6518-6518/com.myapp E/Calender ID:﹕ 1

我应该怎么做才能在 Calendar_Id = 3 中明确创建事件,使用 Intent。

你想做的事是不可能的。当您启动 Intent 以创建事件时,用户将始终能够更改日历选择(就像他可以在存储事件之前更改事件的所有其他值一样)。

虽然有一个解决方法。您可以创建占位符事件并调用 Intent 对其进行编辑。许多日历应用程序不允许将现有事件移动到另一个日历,因此这可以解决问题(除非用户使用支持将事件移动到另一个日历的第 3 方日历应用程序)。

我已在 Specify calendar in Android event creation intent 中概述了此解决方法。顺便说一句,当我 google 你的问题的标题时,这个问题是第一个结果,这可能解释了否决票。