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());
}
}