Как установить напоминание или уведомления, используя события календаря?

#java #android

#java #Android

Вопрос:

Я использую намерение открыть приложение календаря, и мне не нужны явные разрешения от пользователя. Открывается приложение календаря, и события сохраняются, но для уведомлений по умолчанию установлено значение 30 минут. Я хочу изменить его на 5 минут до события.

 long begTime = Long.parseLong(carouselModel.getStTime());
beginTime.setTimeInMillis(begTime);
Calendar endTime = Calendar.getInstance();
long endTim = Long.parseLong(carouselModel.getEndTime());
endTime.setTimeInMillis(endTim);
Intent intent = new Intent(Intent.ACTION_INSERT)
    .setData(CalendarContract.Events.CONTENT_URI)
    .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis())
    .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis())
    .putExtra(CalendarContract.Events.TITLE, "Yoga")
    .putExtra(CalendarContract.Reminders.MINUTES,5)
    .putExtra(CalendarContract.Reminders.EVENT_ID,)
    .putExtra(CalendarContract.Events.DESCRIPTION, "Group class")
    .putExtra(CalendarContract.Events.EVENT_LOCATION, "The gym")
    .putExtra(CalendarContract.Events.AVAILABILITY, CalendarContract.Events.AVAILABILITY_BUSY);
startActivity(intent);
  

Ответ №1:

К сожалению, единственный способ добавить напоминания в календарь прямо сейчас — через контент-провайдера, как указано здесь. Итак, вам нужно добавить разрешения календаря в ваше приложение.

Ответ №2:

Вы можете использовать этот метод для уведомления и напоминания.

 public static long pushEventToCalender(Activity curActivity,
                                       String title, String addInfo, String place, int status,
                                       long startDate, int reminderTime, boolean needReminder,
                                       boolean needMailService) {
    /***************** Event: note(without alert) *******************/
    try {
        String eventUriString = "content://com.android.calendar/events";
        ContentValues eventValues = new ContentValues();

        eventValues.put("calendar_id", 3); // id, We need to choose from
        // our mobile for primary
        // its 1
        eventValues.put("title", title);
        eventValues.put("description", addInfo);
        eventValues.put("eventLocation", place);

        long endDate = startDate   1000 * 60 * 60; // For next 1hr

        eventValues.put("dtstart", startDate);
        eventValues.put("dtend", endDate);

        // values.put("allDay", 1); //If it is bithday alarm or such
        // kind (which should remind me for whole day) 0 for false, 1
        // for true
        eventValues.put("eventStatus", status); // This information is
        // sufficient for most
        // entries tentative (0),
        // confirmed (1) or canceled
        // (2):
        /*
         * eventValues.put("visibility", 3); // visibility to default (0), //
         * confidential (1), private // (2), or public (3):
         */
        // eventValues.put("transparency", 0); // You can control whether
        // an event consumes time
        // opaque (0) or transparent
        // (1).
        eventValues.put("hasAlarm", 1); // 0 for false, 1 for true

        eventValues.put("eventTimezone", TimeZone.getDefault().getID());
        Uri eventUri = curActivity.getApplicationContext().getContentResolver()
                .insert(Uri.parse(eventUriString), eventValues);
        eventID = Long.parseLong(eventUri.getLastPathSegment());


        if (needReminder) {
            /***************** Event: Reminder(with alert) Adding reminder to event *******************/

            String reminderUriString = "content://com.android.calendar/reminders";

            ContentValues reminderValues = new ContentValues();

            reminderValues.put("event_id", eventID);
            reminderValues.put("minutes", reminderTime); // Default value of the
            // system. Minutes is a
            // integer
            reminderValues.put("method", 1); // Alert Methods: Default(0),
            // Alert(1), Email(2),
            // SMS(3)

            Uri reminderUri = curActivity.getApplicationContext()
                    .getContentResolver()
                    .insert(Uri.parse(reminderUriString), reminderValues);

        }

        /***************** Event: Meeting(without alert) Adding Attendies to the meeting *******************/

        if (needMailService) {
            String attendeuesesUriString = "content://com.android.calendar/attendees";

            /********
             * To add multiple attendees need to insert ContentValues multiple
             * times
             ***********/
            ContentValues attendeesValues = new ContentValues();

            attendeesValues.put("event_id", eventID);
            attendeesValues.put("attendeeName", "Name"); // Attendees name
            attendeesValues.put("attendeeEmail", "test@gmail.com");// Attendee
            // E
            // mail
            // id
            attendeesValues.put("attendeeRelationship", 2); // Relationship_Attendee(1),
            // Relationship_None(0),
            // Organizer(2),
            // Performer(3),
            // Speaker(4)
            attendeesValues.put("attendeeType", 0); // None(0), Optional(1),
            // Required(2), Resource(3)
            attendeesValues.put("attendeeStatus", 0); // NOne(0), Accepted(1),
            // Decline(2),
            // Invited(3),
            // Tentative(4)

            Uri attendeuesesUri = curActivity.getApplicationContext()
                    .getContentResolver()
                    .insert(Uri.parse(attendeuesesUriString), attendeesValues);

    } catch (Exception e) {
        e.printStackTrace();
    }
    return eventID;
}