notification - Android: Alarma mĂșltiple no funciona
notificationmanager android ejemplo (2)
En Mi aplicación, he configurado las dos alarmas. En toogleButton voy a configurarlo con el siguiente código:
case R.id.toggleButtonTwoMonth:
myPrefs = this.getSharedPreferences("myPrefs",MODE_WORLD_WRITEABLE);
if (tButtonTwoMonth.isChecked()) {
Toast.makeText(getApplicationContext(), "Two months reminder is On", Toast.LENGTH_SHORT).show();
prefsEditor = myPrefs.edit(); prefsEditor.putBoolean("TwoMonth", true); prefsEditor.commit();
//For Broadcast Alarm
Intent in = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
alarmManagerForTwoMonth1 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmManagerForTwoMonth2 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
pendingIntentOfTwoMonth1 = PendingIntent.getBroadcast(this, 0, in, PendingIntent.FLAG_UPDATE_CURRENT);
pendingIntentOfTwoMonth2 = PendingIntent.getBroadcast(this, 0, in, PendingIntent.FLAG_UPDATE_CURRENT);
// ===================== GST ALARM FOR THE TWO MONTHS ==========================
// for the GST 20 June 2011
Calendar calendar_GST_18_June_2011 = Calendar.getInstance();
calendar_GST_18_June_2011.setTimeInMillis(System.currentTimeMillis());
calendar_GST_18_June_2011.set(2011, 5, 18, mHour, mMinute, 0);
alarmManagerForTwoMonth1.set(AlarmManager.RTC_WAKEUP, calendar_GST_18_June_2011.getTimeInMillis(), pendingIntentOfTwoMonth1);
// for the GST 17 August 2011
Calendar calendar_GST_17_August_2011 = Calendar.getInstance();
calendar_GST_17_August_2011.setTimeInMillis(System.currentTimeMillis());
calendar_GST_17_August_2011.set(2011, 7, 17,mHour, mMinute, 0);
alarmManagerForTwoMonth2.set(AlarmManager.RTC_WAKEUP, calendar_GST_17_August_2011.getTimeInMillis(),pendingIntentOfTwoMonth2);
}
else {
Toast.makeText(getApplicationContext(), "Two months reminder is Off", Toast.LENGTH_SHORT).show();
prefsEditor = myPrefs.edit(); prefsEditor.putBoolean("TwoMonth", false); prefsEditor.commit();
//alarmManagerForTwoMonth.cancel(pendingIntentOfTwoMonth);
}
break;
Pero no recibo la notificación de amarm en ese momento de deseo y si el botón está activado. Ahora, después de la hora de alarma, es pasajero y si lo hago, me desconecto y enciendo, entonces obtengo la alarma.
Entonces, ¿qué pasa con mi Código? Por favor, ayúdame para eso.
EDITADO:
Con esta respuesta, he resuelto poner la alarma por tiempo múltiple: ¿cómo puedo configurar múltiples alarmas en Android?
Pero me pregunto cómo manejarlo. Me refiero a cómo manejar esa alarma en el receptor con un mensaje diferente?
Mi código actualizado con la alarma múltiple está a continuación:
//For Broadcast Alarm
Intent in = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
// ===================== GST ALARM FOR THE TWO MONTHS ==========================
// for the GST 20 June 2011
alarmManagerForTwoMonth1 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
pendingIntentOfTwoMonth1 = PendingIntent.getBroadcast(this, 0, in, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_18_June_2011 = Calendar.getInstance();
calendar_GST_18_June_2011.setTimeInMillis(System.currentTimeMillis());
calendar_GST_18_June_2011.set(2011, 5, 18, mHour, mMinute, 0);
alarmManagerForTwoMonth1.set(AlarmManager.RTC_WAKEUP, calendar_GST_18_June_2011.getTimeInMillis(), pendingIntentOfTwoMonth1);
// for the GST 17 August 2011
alarmManagerForTwoMonth2 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
pendingIntentOfTwoMonth2 = PendingIntent.getBroadcast(this, 1, in, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_17_August_2011 = Calendar.getInstance();
calendar_GST_17_August_2011.setTimeInMillis(System.currentTimeMillis());
calendar_GST_17_August_2011.set(2011, 7, 17,mHour, mMinute, 0);
alarmManagerForTwoMonth2.set(AlarmManager.RTC_WAKEUP, calendar_GST_17_August_2011.getTimeInMillis(),pendingIntentOfTwoMonth2);
Y el Código para el receptor es como a continuación:
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
// My Notification Code
notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
int icon = R.drawable.app_icon;
CharSequence text = "Your tax amount due period";
CharSequence contentTitle = "Tax Calculator App";
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
System.out.println("the Date is: "+(cal.getTime().getDate())+" "+ (cal.getTime().getMonth())+" "+ (cal.get(Calendar.YEAR)));
if((cal.getTime().getDate()==18) && (cal.getTime().getMonth()==5) && (cal.get(Calendar.YEAR)==2011)){
contentText = "Your GST tax amount is due on 20 June 2011";
}
else if((cal.getTime().getDate()==17) && (cal.getTime().getMonth()==7) && (cal.get(Calendar.YEAR)==2011)){
contentText = "Your GST tax amount is due on 19th August, 2011";
}
else{
contentText = "Your GST tax amount is due on Falana Dhikna Date";
}
long when = System.currentTimeMillis();
intent = new Intent(context, NotificationViewer.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
notification = new Notification(icon,text,when);
long[] vibrate = {0,100,200,300};
notification.vibrate = vibrate; // To vibrate the Device
notification.ledARGB = Color.RED;
notification.ledOffMS = 300;
notification.ledOnMS = 300;
notification.defaults |= Notification.DEFAULT_LIGHTS;
//notification.flags |= Notification.FLAG_SHOW_LIGHTS;
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notificationManager.notify(NotificationConstants.NOTIFICATION_ID, notification);
}
¿Ahora cómo manejar esa alarma diferente? Ayudame por esto Gracias.
Editado
Por favor, este código:
case R.id.toggleButtonTwoMonth:
myPrefs = this.getSharedPreferences("myPrefs",MODE_WORLD_WRITEABLE);
if (tButtonTwoMonth.isChecked()) {
Toast.makeText(getApplicationContext(), "Two months reminder is On", Toast.LENGTH_SHORT).show();
prefsEditor = myPrefs.edit(); prefsEditor.putBoolean("TwoMonth", true); prefsEditor.commit();
//For Broadcast Alarm
//Intent in = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
// ===================== GST ALARM FOR THE TWO MONTHS ==========================
// for the GST 20 June 2011
AM_2M_GST_1 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in1 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in1.putExtra("MyMessage","Your GST tax is due on 20 June 2011");
PI_2M_GST_1 = PendingIntent.getBroadcast(this, 0, in1, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_18_June_2011 = Calendar.getInstance();
calendar_GST_18_June_2011.setTimeInMillis(System.currentTimeMillis());
calendar_GST_18_June_2011.set(2011, 5, 18, mHour, mMinute, 0);
AM_2M_GST_1.set(AlarmManager.RTC_WAKEUP, calendar_GST_18_June_2011.getTimeInMillis(), PI_2M_GST_1);
// for the GST 19 August 2011
AM_2M_GST_2 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in2 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in2.putExtra("MyMessage","Your GST tax is due on 19 August 2011");
PI_2M_GST_2 = PendingIntent.getBroadcast(this, 1, in2, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_17_August_2011 = Calendar.getInstance();
calendar_GST_17_August_2011.setTimeInMillis(System.currentTimeMillis());
calendar_GST_17_August_2011.set(2011, 7, 17,mHour, mMinute, 0);
AM_2M_GST_2.set(AlarmManager.RTC_WAKEUP, calendar_GST_17_August_2011.getTimeInMillis(),PI_2M_GST_2);
// for the GST 19 October 2011
AM_2M_GST_3 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in3 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in3.putExtra("MyMessage","Your GST tax is due on 19 October 2011");
PI_2M_GST_3 = PendingIntent.getBroadcast(this, 2, in3, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_19_October_2011 = Calendar.getInstance();
calendar_GST_19_October_2011.setTimeInMillis(System.currentTimeMillis());
calendar_GST_19_October_2011.set(2011, 9, 19,mHour, mMinute, 0);
AM_2M_GST_3.set(AlarmManager.RTC_WAKEUP, calendar_GST_19_October_2011.getTimeInMillis(),PI_2M_GST_3);
// for the GST 17 December 2011
AM_2M_GST_4 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in4 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in4.putExtra("MyMessage","Your GST tax is due on 17 December 2011");
PI_2M_GST_4 = PendingIntent.getBroadcast(this, 3, in4, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_17_December_2011 = Calendar.getInstance();
calendar_GST_17_December_2011.setTimeInMillis(System.currentTimeMillis());
calendar_GST_17_December_2011.set(2011, 11, 17,mHour, mMinute, 0);
AM_2M_GST_4.set(AlarmManager.RTC_WAKEUP, calendar_GST_17_December_2011.getTimeInMillis(),PI_2M_GST_4);
// for the GST 20 February 2012
AM_2M_GST_5 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in5 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in5.putExtra("MyMessage","Your GST tax is due on 18 February 2012");
PI_2M_GST_5 = PendingIntent.getBroadcast(this, 4, in5, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_18_February_2012 = Calendar.getInstance();
calendar_GST_18_February_2012.setTimeInMillis(System.currentTimeMillis());
calendar_GST_18_February_2012.set(2012, 1, 18,mHour, mMinute, 0);
AM_2M_GST_5.set(AlarmManager.RTC_WAKEUP, calendar_GST_18_February_2012.getTimeInMillis(),PI_2M_GST_5);
// for the GST 27 April 2012
AM_2M_GST_6 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in6 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in6.putExtra("MyMessage","Your GST tax is due on 27 April 2012");
PI_2M_GST_6 = PendingIntent.getBroadcast(this, 5, in6, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_GST_27_April_2012 = Calendar.getInstance();
calendar_GST_27_April_2012.setTimeInMillis(System.currentTimeMillis());
calendar_GST_27_April_2012.set(2012, 3, 27,mHour, mMinute, 0);
AM_2M_GST_6.set(AlarmManager.RTC_WAKEUP, calendar_GST_27_April_2012.getTimeInMillis(),PI_2M_GST_6);
// ===================== PROVISIONAL ALARM FOR THE TWO MONTHS ==========================
// for the PROVISIONAL 26 August 2011
AM_2M_PROVISIONAL_1 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in7 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in7.putExtra("MyMessage","Your PROVISIONAL tax is due on 26 August 2011");
PI_2M_PROVISIONAL_1 = PendingIntent.getBroadcast(this, 6, in7, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_PROVISIONAL_26_August_2011 = Calendar.getInstance();
calendar_PROVISIONAL_26_August_2011.setTimeInMillis(System.currentTimeMillis());
calendar_PROVISIONAL_26_August_2011.set(2011, 7, 26,mHour, mMinute, 0);
AM_2M_PROVISIONAL_1.set(AlarmManager.RTC_WAKEUP, calendar_PROVISIONAL_26_August_2011.getTimeInMillis(),PI_2M_PROVISIONAL_1);
// for the PROVISIONAL 13 January 2012
AM_2M_PROVISIONAL_2 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in8 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in8.putExtra("MyMessage","Your PROVISIONAL tax is due on 13 January 2012");
PI_2M_PROVISIONAL_2 = PendingIntent.getBroadcast(this, 7, in8, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_PROVISIONAL_13_January_2012 = Calendar.getInstance();
calendar_PROVISIONAL_13_January_2012.setTimeInMillis(System.currentTimeMillis());
calendar_PROVISIONAL_13_January_2012.set(2012, 0, 13,mHour, mMinute, 0);
AM_2M_PROVISIONAL_2.set(AlarmManager.RTC_WAKEUP, calendar_PROVISIONAL_13_January_2012.getTimeInMillis(),PI_2M_PROVISIONAL_2);
// for the PROVISIONAL 5 May 2012
AM_2M_PROVISIONAL_3 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in9 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in9.putExtra("MyMessage","Your PROVISIONAL tax is due on 5 May 2012");
PI_2M_PROVISIONAL_3 = PendingIntent.getBroadcast(this, 8, in9, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_PROVISIONAL_5_May_2012 = Calendar.getInstance();
calendar_PROVISIONAL_5_May_2012.setTimeInMillis(System.currentTimeMillis());
calendar_PROVISIONAL_5_May_2012.set(2012, 4, 5,mHour, mMinute, 0);
AM_2M_PROVISIONAL_3.set(AlarmManager.RTC_WAKEUP, calendar_PROVISIONAL_5_May_2012.getTimeInMillis(),PI_2M_PROVISIONAL_3);
// ===================== TERMINAL ALARM FOR THE TWO MONTHS ==========================
// for the TERMINAL 5 April 2012
AM_2M_TERMINAL_1 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent in10 = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in10.putExtra("MyMessage","Your TERMINAL tax is due on 5 APRIL 2012");
PI_2M_TERMINAL_1 = PendingIntent.getBroadcast(this, 9, in10, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar_TERMINAL_5_APRIL_2012 = Calendar.getInstance();
calendar_TERMINAL_5_APRIL_2012.setTimeInMillis(System.currentTimeMillis());
calendar_TERMINAL_5_APRIL_2012.set(2012, 3, 5,mHour, mMinute, 0);
AM_2M_TERMINAL_1.set(AlarmManager.RTC_WAKEUP, calendar_TERMINAL_5_APRIL_2012.getTimeInMillis(),PI_2M_TERMINAL_1);
}
else {
Toast.makeText(getApplicationContext(), "Two months reminder is Off", Toast.LENGTH_SHORT).show();
prefsEditor = myPrefs.edit(); prefsEditor.putBoolean("TwoMonth", false); prefsEditor.commit();
AM_2M_GST_1.cancel(PI_2M_GST_1);
AM_2M_GST_2.cancel(PI_2M_GST_2);
AM_2M_GST_3.cancel(PI_2M_GST_3);
AM_2M_GST_4.cancel(PI_2M_GST_4);
AM_2M_GST_5.cancel(PI_2M_GST_5);
AM_2M_GST_6.cancel(PI_2M_GST_6);
AM_2M_PROVISIONAL_1.cancel(PI_2M_PROVISIONAL_1);
AM_2M_PROVISIONAL_2.cancel(PI_2M_PROVISIONAL_2);
AM_2M_PROVISIONAL_3.cancel(PI_2M_PROVISIONAL_3);
AM_2M_TERMINAL_1.cancel(PI_2M_TERMINAL_1);
//alarmManagerForTwoMonth.cancel(pendingIntentOfTwoMonth);
}
break;
Ahora. aquí recibí la Notificación. pero lo quiero separado para todos. Significa si ya existe uno y si se genera nuevo, entonces no se debe actualizar el que ya está presente, sino que se debe crear un nuevo separato. Gracias.
Ok, porque no haces esto
Intent in = new Intent(this, AlarmReceiverNotificationForTwoMonth.class);
in.putExtra("MyMessage","Your tax is due on blah blah blah");
pendingIntentOfTwoMonth1 = PendingIntent.getBroadcast(this, 0, in, PendingIntent.FLAG_UPDATE_CURRENT);
Y en el onRecieve
Simplemente recupere el mensaje de la intención
public void onReceive(Context context, Intent intent) {
// blah blah
Toast.show(context,intent.getStringExtra("MyMessage"),Toast.LENGTH_LONG).show();
Por favor intente mi respuesta desde el siguiente enlace utilizando la base de datos.
AlarmManager con receptor de difusión
Primero agregue la hora y fecha de alarma en la base de datos de su actividad y luego cree una clase de receptor de difusión para obtener los datos de la base de datos.