8

In my app, the users can add special events to their Google Calendar. I want that the events will be added without any alarm/reminder/notification. Some of the users' calendars have default settings for the reminders, as "A day before the event, at 9:00".

How can I add the events so they will not have any alarm at all despite the default settings?

    ContentValues eventValues = new ContentValues();
    eventValues.put("calendar_id", calendarId);
    eventValues.put("title",title);
    eventValues.put("allDay", 1);
    eventValues.put("dtstart", dtstart);
    eventValues.put("dtend", dtend );
    eventValues.put("hasAlarm", 1);  // I tried both 0 and 1, none of them solved the problem!
    eventValues.put("hasAttendeeData", 1);
    eventValues.put("availability",1); 

Edit: It seems that the reminders were added only after the events were synchronized with Google's services, some minutes after, not immediately. How can I prevent it?

TamarG
  • 3,522
  • 12
  • 44
  • 74
  • Have you tried deleting all event reminders after adding an event? – Misagh Emamverdi Aug 07 '16 at 09:14
  • No. I'll try and update here. – TamarG Aug 07 '16 at 09:15
  • How can I delete reminders? – TamarG Aug 07 '16 at 09:58
  • 1
    `context.getContentResolver().delete(CalendarContract.Reminders.CONTENT_URI, CalendarContract.Reminders.EVENT_ID + "=?", new String[]{Long.toString(eventId)});` – Misagh Emamverdi Aug 07 '16 at 10:12
  • I tried to delete the reminders (with your code) right after adding the events but it seems that the reminders were added only a few minutes after - when the events were synchronized with Google's servers. So there was nothing to delete yet. – TamarG Aug 07 '16 at 19:17
  • Instead of deleting reminders after creating event, you can set a `BroadCastReceiver` on `CalendarProvider`. It will fired when a change happens in provider contains adding reminder. So if you have saved your event ids for example in a `SharedPreference` you can delete reminders in `onReceive()` method. – Misagh Emamverdi Aug 08 '16 at 05:56
  • 1
  • I'll try it. You can write both your answers as an answer so if it'll solve my problem I'll mark it as solved. – TamarG Aug 08 '16 at 17:39

1 Answers1

2

You can set a BroadCastReceiver on CalendarProvider. It will fired when any changes happen in provider:

<receiver android:name="CalendarChangeReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.PROVIDER_CHANGED" /> 
    <data android:scheme="content" /> 
    <data android:host="com.android.calendar" /> 
</intent-filter> </receiver>

So when reminders are added to events, this will fired. You can save your inserted events ids in SharedPreferences and then delete reminders in onReceive():

context.getContentResolver().delete(CalendarContract.Reminders.CONTENT_URI, CalendarContract.Reminders.EVENT_ID + "=?", new String[]{Long.toString(eventId)});
Misagh Emamverdi
  • 3,654
  • 5
  • 33
  • 57