I can't figure out why whenever I open my app my notification set to go off by an alarm is set off. I have it set on a calendar for only a specific day and time. Not only that my alarm isn't even going off at the specified time and day of the week from the calendar. Do i even need a service with my alarm? I am trying to make sure this goes off even when the application is closed.
The code below (MyService) is called in MainActivity onCreate().
[Service]
public class MyService : Service
{
//const int NOTIFICATION_ID = 9000;
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
SetAlarm();
return StartCommandResult.Sticky;
}
private void SetAlarm()
{
//setting Calendar
Java.Util.Calendar calendar = Java.Util.Calendar.Instance;
calendar.Set(Java.Util.CalendarField.DayOfWeek, 1);
calendar.Set(Java.Util.CalendarField.HourOfDay, 02);
calendar.Set(Java.Util.CalendarField.Minute, 15);
AlarmManager manager = (AlarmManager)GetSystemService(Context.AlarmService);
Intent managerIntent;
PendingIntent pendingIntent;
managerIntent = new Intent(this, typeof(AlarmNotificationReceiver));
// pendingIntent = PendingIntent.GetBroadcast(this, 0, managerIntent, 0);
pendingIntent = PendingIntent.GetBroadcast(this, 0, managerIntent, PendingIntentFlags.UpdateCurrent);
//manager.SetRepeating(AlarmType.RtcWakeup, SystemClock.ElapsedRealtime() + 3000, 60 + 1000, pendingIntent);
// manager.SetRepeating(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime() + AlarmManager.IntervalHalfHour, AlarmManager.IntervalHalfHour, pendingIntent);
// manager.SetRepeating(AlarmType.RtcWakeup, calendar.TimeInMillis, AlarmManager.IntervalHalfHour, pendingIntent);
manager.SetRepeating(AlarmType.RtcWakeup, calendar.TimeInMillis, 604800, pendingIntent);
}
[BroadcastReceiver(Enabled = true)]
public class AlarmNotificationReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.SetAutoCancel(true)
.SetDefaults((int)NotificationDefaults.All)
.SetSmallIcon(Resource.Drawable.Icon)
.SetContentTitle("Comic Pull List")
.SetStyle(new NotificationCompat.BigTextStyle().BigText("New Comics have came out this week! Check your list and pull comics if needed."))
.SetContentText("New Comics have came out this week! Check your list and pull comics if needed.");
NotificationManager manager = (NotificationManager)context.GetSystemService(Context.NotificationService);
manager.Notify(1, builder.Build());
}
}
}
My new code i added is below:
AlarmManager manager = (AlarmManager)GetSystemService(Context.AlarmService);
//setting Calendar
Java.Util.Calendar calendar = Java.Util.Calendar.Instance;
if (calendar.Get(Java.Util.CalendarField.DayOfWeek) == Java.Util.Calendar.Wednesday)
{
calendar.Add(Java.Util.CalendarField.Date, 4);
}
while (calendar.Get(Java.Util.CalendarField.DayOfWeek) != Java.Util.Calendar.Wednesday)
{
calendar.Add(Java.Util.CalendarField.Date, 4);
}
//calendar.Set(Java.Util.CalendarField.DayOfWeek, 1);
calendar.Set(Java.Util.CalendarField.HourOfDay, 15);
calendar.Set(Java.Util.CalendarField.Minute, 30);
Intent managerIntent;
PendingIntent pendingIntent;
managerIntent = new Intent(this, typeof(AlarmNotificationReceiver));
// pendingIntent = PendingIntent.GetBroadcast(this, 0, managerIntent, 0);
pendingIntent = PendingIntent.GetBroadcast(this, 0, managerIntent, PendingIntentFlags.UpdateCurrent);
//manager.SetRepeating(AlarmType.RtcWakeup, SystemClock.ElapsedRealtime() + 3000, 60 + 1000, pendingIntent);
// manager.SetRepeating(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime() + AlarmManager.IntervalHalfHour, AlarmManager.IntervalHalfHour, pendingIntent);
// manager.SetRepeating(AlarmType.RtcWakeup, calendar.TimeInMillis, AlarmManager.IntervalHalfHour, pendingIntent);
manager.SetRepeating(AlarmType.RtcWakeup, calendar.TimeInMillis, 1000 * 60 * 60 * 24 * 7, pendingIntent);
You are setting the first alarm in the past.
You need to set the date to the next Sunday.
Example:
Output: