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 你的问题的标题时,这个问题是第一个结果,这可能解释了否决票。
您好,我正在使用以下代码通过 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 你的问题的标题时,这个问题是第一个结果,这可能解释了否决票。