Notificação android não é lançada

Utilizo o RTP_WAKEUP para “acordar” o meu dispositivo quando este se dá conta que tem notificações a lançar e de facto consigo lançar notificações para daqui a 10/15 ou ate 20 minutos, mas quando tento lançar uma notificação daqui a 2 horas ou ate dias esta não ocorre…

Deixo aqui parte do código onde elaboro todo o processo.
O que tenho de errado para isto acontecer?

Classe onde crio o alarme, para lançar a notificação.

			Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.set(Calendar.DAY_OF_MONTH, 25);
            calendar.set(Calendar.MONTH, 6);
            calendar.set(Calendar.YEAR, 2017);
            calendar.set(Calendar.HOUR_OF_DAY, 20);
            calendar.set(Calendar.MINUTE, 40);
            calendar.set(Calendar.SECOND, 07);
			
            // Obtém um alarm manager
            AlarmManager alarmManager = (AlarmManager) getContext().getSystemService(getContext().ALARM_SERVICE);

            // O id a ser usado no pending intent
            int id = (int) System.currentTimeMillis();

            // Prepare the intent which should be launched at the date
            Intent intent = new Intent(getContext(), CriarNotificacao.class);
            intent.putExtra("id", id);
			
            // Obtém o pending intent
            PendingIntent pendingIntent = PendingIntent.getBroadcast(getContext(), id, intent, PendingIntent.FLAG_UPDATE_CURRENT);

            // Regista o alerta no sistema.
            alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
			
					Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.set(Calendar.DAY_OF_MONTH, 25);
            calendar.set(Calendar.MONTH, 6);
            calendar.set(Calendar.YEAR, 2017);
            calendar.set(Calendar.HOUR_OF_DAY, 20);
            calendar.set(Calendar.MINUTE, 40);
            calendar.set(Calendar.SECOND, 07);
			
            // Obtém um alarm manager
            AlarmManager alarmManager = (AlarmManager) getContext().getSystemService(getContext().ALARM_SERVICE);

            // O id a ser usado no pending intent
            int id = (int) System.currentTimeMillis();

            // Prepare the intent which should be launched at the date
            Intent intent = new Intent(getContext(), CriarNotificacao.class);
            intent.putExtra("id", id);
			
            // Obtém o pending intent
            PendingIntent pendingIntent = PendingIntent.getBroadcast(getContext(), id, intent, PendingIntent.FLAG_UPDATE_CURRENT);

            // Regista o alerta no sistema.
            alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

Classe onde lanço a notificação

  public class CriarNotificacao extends BroadcastReceiver {
			@Override
			public void onReceive(Context context, Intent intent) {

				Bundle extras = intent.getExtras();
				int id = extras.getInt("id");

				PendingIntent resultPendingIntent =
						PendingIntent.getActivity(context,
								0,
								intent,
								PendingIntent.FLAG_CANCEL_CURRENT
						);

				NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
						.setContentTitle("titulo")
						.setContentText("mensagem")
						.setContentIntent(resultPendingIntent)
						.setAutoCancel(true);
				mBuilder.setSmallIcon(R.drawable.ic_cake);

				Intent resultIntent = new Intent(context, MainActivity.class);
				resultIntent.putExtra("id", String.valueOf(id));

				mBuilder.setContentIntent(resultPendingIntent);

				NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

				Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
				vibrator.vibrate(1500);

				mNotificationManager.notify(id, mBuilder.build());
			}
		}