¿Cómo puedo configurar múltiples alarmas en Android?
Pregunta
Hasta ahora y gracias a este sitio web, he podido configurar una alarma que se configurará y activa, incluso si gira de mi teléfono.
Ahora, configuro una alarma para mostrar un recordatorio para el evento A y necesito la aplicación para configurar otra alarma para mostrar otro recordatorio para el evento b.
Debo estar haciendo algo mal, porque solo dispara el recordatorio para el evento A. Parece que una vez configurada, cualquier otra alarma se entiende como la misma.: - (
Aquí está el detalle de lo que estoy haciendo en dos pasos:
1) De una actividad Configure una alarma que a cierta hora y fecha llamará a un receptor
Intent intent = new Intent(Activity_Reminder.this,
AlarmReceiver_SetOnService.class);
intent.putExtra("item_name", prescription
.getItemName());
intent
.putExtra(
"message",
Activity_Reminder.this
.getString(R.string.notif_text));
intent.putExtra("item_id", itemId);
intent.putExtra("activityToTrigg",
"com.companyName.appName.main.Activity_Reminder");
PendingIntent mAlarmSender;
mAlarmSender = PendingIntent.getBroadcast(
Activity_Reminder.this, 0, intent, 0);
long alarmTime = dateMgmt.getTimeForAlarm(pickedDate);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(alarmTime);
// Schedule the alarm!
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, alarmTime + 15000,
mAlarmSender);
2) del receptor I Llama a un servicio
Bundle bundle = intent.getExtras();
String itemName = bundle.getString("item_name");
String reminderOrAlarmMessage = bundle.getString("message");
String activityToTrigg = bundle.getString("activityToTrigg");
int itemId = Integer.parseInt(bundle.getString("item_id"));
NotificationManager nm = (NotificationManager) context.getSystemService("notification");
CharSequence text = itemName + " "+reminderOrAlarmMessage;
Notification notification = new Notification(R.drawable.icon, text,
System.currentTimeMillis());
Intent newIntent = new Intent();
newIntent.setAction(activityToTrigg);
newIntent.putExtra("item_id", itemId);
CharSequence text1= itemName + " "+reminderOrAlarmMessage;
CharSequence text2= context.getString(R.string.notif_Go_To_Details);
PendingIntent pIntent = PendingIntent.getActivity(context,0, newIntent, 0);
notification.setLatestEventInfo(context, text1, text2, pIntent);
notification.flags = Notification.FLAG_AUTO_CANCEL;
notification.defaults = Notification.DEFAULT_ALL;
nm.notify(itemId, notification);
gracias de antemano,
MONN3T
Solución
OK, cuando establece un PendingIntent, se supone que debe asignarle una identificación única, en caso de que desee identificarlo más tarde (para modificarlo / cancelarlo)
static PendingIntent getActivity(Context context, int requestCode, Intent intent, int flags)
//Retrieve a PendingIntent that will start a new activity, like calling Context.startActivity(Intent).
static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flags)
//Retrieve a PendingIntent that will perform a broadcast, like calling Context.sendBroadcast().
El código de solicitud es ese ID.
En su código, sigue reiniciando el mismo PendingIntent, en su lugar, use un código de solicitud diferente cada vez.
PendingIntent pIntent = PendingIntent.getActivity(context,uniqueRQCODE, newIntent, 0);
Tiene que ser un número entero, supongo que tiene un primario ( itemid ) que puede identificar la alarma a de la alarma B.
Otros consejos
Puede configurar múltiples alarmas al suministrar un código de solicitud diferente en PendingIntent.getBroadCast (......)
El enfoque que utilicé para configurar múltiples alarmas es que creé una sola alarma.Inicié un entero estático en la clase de ajuste de alarma que se incrementará cada vez desde mi actividad principal cuando haga clic en el botón "Agregar alarma" en mi actividad principal. E.g.
mainactivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void addAlarmClick(View v) {
AlarmActivity.broadcastCode++;
startActivity(new Intent(this, AlarmActivity.class));
}
}
alarmactivity.java
public class AlarmActivity extends AppCompatActivity {`
//........
public static int broadcastCode=0;
//........
Intent myIntent = new Intent(AlarmActivity.this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(AlarmActivity.this,
broadcastCode, myIntent, 0);