Добавление события с напоминаниями в календарь с помощью метода Intent.putExtra ()

Я пытаюсь добавить события в календарь со следующим кодом:

public Intent calPopulation() { Intent calIntent = new Intent(Intent.ACTION_INSERT); calIntent.setType("vnd.android.cursor.item/event"); calIntent.putExtra(CalendarContract.Events.TITLE, this._title); GregorianCalendar calDate = new GregorianCalendar(this._year,this._month, this._day, this._hour, this._minute); calIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, calDate.getTimeInMillis()); calIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, calDate.getTimeInMillis()+60*60*1000); calIntent.putExtra(CalendarContract.Events.HAS_ALARM, true); calIntent.putExtra(CalendarContract.Reminders.EVENT_ID, CalendarContract.Events._ID); calIntent.putExtra(CalendarContract.Events.ALLOWED_REMINDERS, "METHOD_DEFAULT"); calIntent.putExtra(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT); calIntent.putExtra(CalendarContract.Reminders.MINUTES,5); return calIntent; } 

Затем запустите действие с помощью: startActivity(mTask.calPopulation());

У меня нет никаких проблем, событие приложения календаря запущено с правильной информацией, введенной мной в мое приложение, за исключением того, что она не заполняет событие напоминанием, которое я хотел бы добавить.

У вас есть какие-то подсказки? Я попытался выполнить поиск по многим темам, используя этот метод (я имею в виду aim.putExtra), но никогда не нахожу ничего интересного.

Другое дело, есть ли способ напрямую сохранить событие + напоминание в календаре, не открывая приложение «Календарь» и запрашивая действие пользователя?

Заранее спасибо. Алекс.

    Нет ответа в соответствии с методом, который я указал, но другим способом я нашел, чтобы добавить событие с напоминаниями в календарь.

    Здесь методы работают отлично для меня:

     // Add an event to the calendar of the user. public void addEvent(Context context) { GregorianCalendar calDate = new GregorianCalendar(this._year, this._month, this._day, this._hour, this._minute); try { ContentResolver cr = context.getContentResolver(); ContentValues values = new ContentValues(); values.put(CalendarContract.Events.DTSTART, calDate.getTimeInMillis()); values.put(CalendarContract.Events.DTEND, calDate.getTimeInMillis()+60*60*1000); values.put(CalendarContract.Events.TITLE, this._title); values.put(CalendarContract.Events.CALENDAR_ID, 1); values.put(CalendarContract.Events.EVENT_TIMEZONE, Calendar.getInstance() .getTimeZone().getID()); System.out.println(Calendar.getInstance().getTimeZone().getID()); Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values); // Save the eventId into the Task object for possible future delete. this._eventId = Long.parseLong(uri.getLastPathSegment()); // Add a 5 minute, 1 hour and 1 day reminders (3 reminders) setReminder(cr, this._eventId, 5); setReminder(cr, this._eventId, 60); setReminder(cr, this._eventId, 1440); } catch (Exception e) { e.printStackTrace(); } } // routine to add reminders with the event public void setReminder(ContentResolver cr, long eventID, int timeBefore) { try { ContentValues values = new ContentValues(); values.put(CalendarContract.Reminders.MINUTES, timeBefore); values.put(CalendarContract.Reminders.EVENT_ID, eventID); values.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT); Uri uri = cr.insert(CalendarContract.Reminders.CONTENT_URI, values); Cursor c = CalendarContract.Reminders.query(cr, eventID, new String[]{CalendarContract.Reminders.MINUTES}); if (c.moveToFirst()) { System.out.println("calendar" + c.getInt(c.getColumnIndex(CalendarContract.Reminders.MINUTES))); } c.close(); } catch (Exception e) { e.printStackTrace(); } } // function to remove an event from the calendar using the eventId stored within the Task object. public void removeEvent(Context context) { ContentResolver cr = context.getContentResolver(); int iNumRowsDeleted = 0; Uri eventsUri = Uri.parse(CALENDAR_URI_BASE+"events"); Uri eventUri = ContentUris.withAppendedId(eventsUri, this._eventId); iNumRowsDeleted = cr.delete(eventUri, null, null); Log.i(DEBUG_TAG, "Deleted " + iNumRowsDeleted + " calendar entry."); } public int updateEvent(Context context) { int iNumRowsUpdated = 0; GregorianCalendar calDate = new GregorianCalendar(this._year, this._month, this._day, this._hour, this._minute); ContentValues event = new ContentValues(); event.put(CalendarContract.Events.TITLE, this._title); event.put("hasAlarm", 1); // 0 for false, 1 for true event.put(CalendarContract.Events.DTSTART, calDate.getTimeInMillis()); event.put(CalendarContract.Events.DTEND, calDate.getTimeInMillis()+60*60*1000); Uri eventsUri = Uri.parse(CALENDAR_URI_BASE+"events"); Uri eventUri = ContentUris.withAppendedId(eventsUri, this._eventId); iNumRowsUpdated = context.getContentResolver().update(eventUri, event, null, null); // TODO put text into strings.xml Log.i(DEBUG_TAG, "Updated " + iNumRowsUpdated + " calendar entry."); return iNumRowsUpdated; } 

    Надеюсь, это поможет другим, которые столкнулись с той же проблемой, что и я :).

    Алекс.

    Согласитесь с вышеуказанным ответом, но импорт – это идентификатор календаря. Вы не можете использовать 1, поскольку телефон samsung использует 1 для своего каландра (S Planner). Идентификатор календаря – это идентификатор, для которого вам нужно событие. Вы можете получить идентификатор календаря, указав код для определенного события

     int calenderId=-1; String calenderEmaillAddress="xxx@gmail.com"; String[] projection = new String[]{ CalendarContract.Calendars._ID, CalendarContract.Calendars.ACCOUNT_NAME}; ContentResolver cr = activity.getContentResolver(); Cursor cursor = cr.query(Uri.parse("content://com.android.calendar/calendars"), projection, CalendarContract.Calendars.ACCOUNT_NAME + "=? and (" + CalendarContract.Calendars.NAME + "=? or " + CalendarContract.Calendars.CALENDAR_DISPLAY_NAME + "=?)", new String[]{calenderEmaillAddress, calenderEmaillAddress, calenderEmaillAddress}, null); if (cursor.moveToFirst()) { if (cursor.getString(1).equals(calenderEmaillAddress)) calenderId=cursor.getInt(0); //youre calender id to be insered in above answer }