_DeV_
31/12/15, 12:33:53
Buenas!
Os comento, en mi app cada día a una hora X debe saltar una notificación. He conseguido que la alarma suene a la hora que yo quiera y en los intervalos de tiempo que yo quiera, por ejemplo:
Son las (por poner un ejemplo) 10:30, configuro la notificación a las 10:35 y que notifique en intervalos de 2 min. Por lo tanto ejecuto la app y a los 5 min me salta la notificación y luego cada dos minutos. Todo perfecto, sigue sonando aunque cierre la app y aunque bloquee el movil.
El problema viene cuando apago el móvil y lo vuelvo a encender, la notificación quiero que siga saltando pero ya no salta más.
Cómo puedo solucionar eso? Os enseño código que tengo:
MainActivity.java tengo una función alarma que se llama cada vez que se abre la app:
private void alarm(){
Calendar c = Calendar.getInstance();
c.setTime(new Date());
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
AlarmsDB al = new AlarmsDB(getApplicationContext());
if(al.alarmDay(dayOfWeek)) { //If today the user want the alarm, we set it. If not, nothing happens
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent alarmIntent = new Intent(this, AlarmReceiver.class); // AlarmReceiver1 = broadcast receiver
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmIntent.setData((Uri.parse("custom://" + System.currentTimeMillis())));
alarmManager.cancel(pendingIntent);
Calendar alarmStartTime = Calendar.getInstance();
Calendar now = Calendar.getInstance();
alarmStartTime.set(Calendar.HOUR_OF_DAY, 10);
alarmStartTime.set(Calendar.MINUTE, 35);
alarmStartTime.set(Calendar.SECOND, 00);
if (now.after(alarmStartTime)) {
Log.d("Hey", "Added a day");
alarmStartTime.add(Calendar.DATE, 1);
}
switch (al.alarmHowManyDaysNext(dayOfWeek)){//We decide when the alarm will ring again.
case 1: //In 1 day
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY , pendingIntent);
break;
case 2: //In 2 days
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), (AlarmManager.INTERVAL_DAY * 2), pendingIntent);
break;
case 3: //In 3 days
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), (AlarmManager.INTERVAL_DAY * 3), pendingIntent);
break;
case 4: //In 4 day
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), (AlarmManager.INTERVAL_DAY * 4), pendingIntent);
break;
case 5: //In 5 day
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), (AlarmManager.INTERVAL_DAY * 5), pendingIntent);
break;
case 6: //In 6 day
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), (AlarmManager.INTERVAL_DAY * 6), pendingIntent);
break;
case 7: //In 7 day
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), (AlarmManager.INTERVAL_DAY * 7), pendingIntent);
break;
default: //In 1 day -- to hang errors.
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
break;
}
Log.d("Alarm", "Alarm set, next will ring in " + al.alarmHowManyDaysNext(dayOfWeek) + " days.");
}
}Luego está la clase AlarmReciever que se encarga de recibir y lanzar la notificación:
public void onReceive(Context context, Intent intent) {
Notification(context,"Menú del día disponible, consúltalo.");
}
public void Notification(Context context, String message) {
// Create Notification using NotificationCompat.Builder
NotificationCompat.Builder builder = new NotificationCompat.Builder(
context)
// Set Icon
.setSmallIcon(R.drawable.ic_app)
// Set Ticker Message
.setTicker(R.string.titlenot)
// Set Title
.setContentTitle(R.string.textnot)
// Set Text
.setContentText(message)
// Add an Action Button below Notification
//.addAction(R.drawable.ic_app, "Action Button", pIntent)
// Set PendingIntent into Notification
//.setContentIntent(pIntent)
// Dismiss Notification
.setAutoCancel(true)
// Set vibration
.setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 });
// Create Notification Manager
NotificationManager notificationmanager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
// Build Notification with Notification Manager
notificationmanager.notify(0, builder.build());
Log.d("AlarmReceiver", "Alarma sonando, son las: " + new Date());
}A ver si me podéis echar una mano con esto, muchas gracias!
Un saludo!
Os comento, en mi app cada día a una hora X debe saltar una notificación. He conseguido que la alarma suene a la hora que yo quiera y en los intervalos de tiempo que yo quiera, por ejemplo:
Son las (por poner un ejemplo) 10:30, configuro la notificación a las 10:35 y que notifique en intervalos de 2 min. Por lo tanto ejecuto la app y a los 5 min me salta la notificación y luego cada dos minutos. Todo perfecto, sigue sonando aunque cierre la app y aunque bloquee el movil.
El problema viene cuando apago el móvil y lo vuelvo a encender, la notificación quiero que siga saltando pero ya no salta más.
Cómo puedo solucionar eso? Os enseño código que tengo:
MainActivity.java tengo una función alarma que se llama cada vez que se abre la app:
private void alarm(){
Calendar c = Calendar.getInstance();
c.setTime(new Date());
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
AlarmsDB al = new AlarmsDB(getApplicationContext());
if(al.alarmDay(dayOfWeek)) { //If today the user want the alarm, we set it. If not, nothing happens
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent alarmIntent = new Intent(this, AlarmReceiver.class); // AlarmReceiver1 = broadcast receiver
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmIntent.setData((Uri.parse("custom://" + System.currentTimeMillis())));
alarmManager.cancel(pendingIntent);
Calendar alarmStartTime = Calendar.getInstance();
Calendar now = Calendar.getInstance();
alarmStartTime.set(Calendar.HOUR_OF_DAY, 10);
alarmStartTime.set(Calendar.MINUTE, 35);
alarmStartTime.set(Calendar.SECOND, 00);
if (now.after(alarmStartTime)) {
Log.d("Hey", "Added a day");
alarmStartTime.add(Calendar.DATE, 1);
}
switch (al.alarmHowManyDaysNext(dayOfWeek)){//We decide when the alarm will ring again.
case 1: //In 1 day
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY , pendingIntent);
break;
case 2: //In 2 days
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), (AlarmManager.INTERVAL_DAY * 2), pendingIntent);
break;
case 3: //In 3 days
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), (AlarmManager.INTERVAL_DAY * 3), pendingIntent);
break;
case 4: //In 4 day
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), (AlarmManager.INTERVAL_DAY * 4), pendingIntent);
break;
case 5: //In 5 day
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), (AlarmManager.INTERVAL_DAY * 5), pendingIntent);
break;
case 6: //In 6 day
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), (AlarmManager.INTERVAL_DAY * 6), pendingIntent);
break;
case 7: //In 7 day
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), (AlarmManager.INTERVAL_DAY * 7), pendingIntent);
break;
default: //In 1 day -- to hang errors.
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
break;
}
Log.d("Alarm", "Alarm set, next will ring in " + al.alarmHowManyDaysNext(dayOfWeek) + " days.");
}
}Luego está la clase AlarmReciever que se encarga de recibir y lanzar la notificación:
public void onReceive(Context context, Intent intent) {
Notification(context,"Menú del día disponible, consúltalo.");
}
public void Notification(Context context, String message) {
// Create Notification using NotificationCompat.Builder
NotificationCompat.Builder builder = new NotificationCompat.Builder(
context)
// Set Icon
.setSmallIcon(R.drawable.ic_app)
// Set Ticker Message
.setTicker(R.string.titlenot)
// Set Title
.setContentTitle(R.string.textnot)
// Set Text
.setContentText(message)
// Add an Action Button below Notification
//.addAction(R.drawable.ic_app, "Action Button", pIntent)
// Set PendingIntent into Notification
//.setContentIntent(pIntent)
// Dismiss Notification
.setAutoCancel(true)
// Set vibration
.setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 });
// Create Notification Manager
NotificationManager notificationmanager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
// Build Notification with Notification Manager
notificationmanager.notify(0, builder.build());
Log.d("AlarmReceiver", "Alarma sonando, son las: " + new Date());
}A ver si me podéis echar una mano con esto, muchas gracias!
Un saludo!