36 votes

Comment puis-je configurer plusieurs alarmes dans Android?

Jusqu'à présent, et grâce à ce site, j'ai pu mettre en place un dispositif d'alarme qui sera mis en place et active, même si j'éteins mon téléphone.

Maintenant, j'ai mis une alarme pour afficher un rappel pour Un événement et j'ai besoin de l'application pour configurer un autre alarme de montrer un autre rappel pour l'événement B.

Je dois être en train de faire quelque chose de mal, parce qu'il ne se déclenche le rappel pour l'événement A. Il semble que, une fois mis en place, de toute autre alarme est comprise comme étant la même. :-(

Voici le détail de ce que je fais en deux étapes:

1) à Partir d'une activité que j'ai mis une alarme qu'à un certain moment et à la date de l'appel d'un récepteur

                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) à Partir du récepteur-je appeler un service

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

Merci d'Avance,

monn3t

78voto

st0le Points 15318

Ok, lorsque vous définissez un PendingIntent, vous êtes censé affecter un ID unique à elle, en cas vous souhaitez identifier plus tard (pour la modification/annulation de celui-ci)

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().

La Demande de code est l'IDENTIFIANT.

Dans votre code, vous gardez la réinitialisation de la MÊME PendingIntent, au lieu d'utiliser un autre RequestCode à chaque fois.

PendingIntent pIntent = PendingIntent.getActivity(context,uniqueRQCODE, newIntent, 0);

Il est entier, je suppose que vous avez un primaryid (itemId) qui permet d'identifier Une Alarme d'Alarme B.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X