web-dev-qa-db-fra.com

Comment puis-je configurer plusieurs alarmes dans Android?

Jusqu'à présent et grâce à ce site, j'ai pu mettre en place une alarme qui sera mise en place et active, même si je tourne mon téléphone.

Maintenant, j'ai configuré une alarme pour afficher un rappel pour l'événement A et j'ai besoin de l'application pour configurer une autre alarme pour afficher n autre rappel pour l'événement B.

Je dois faire quelque chose de mal, car il ne déclenche que le rappel de l'événement A. Il semble qu'une fois configurée, toute autre alarme soit comprise comme la même. :-(

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

1) À partir d'une activité, je règle une alarme qui, à une certaine heure et date, appellera 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) Depuis le récepteur, j'appelle 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

36
monn3t

Ok, lorsque vous définissez un PendingIntent, vous êtes censé lui attribuer un ID unique, au cas où vous voudriez l'identifier plus tard (pour le modifier/l'annuler)

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

Le code de demande est cet ID.

Dans votre code, vous continuez de réinitialiser le MÊME PendingIntent, utilisez à la place un RequestCode différent à chaque fois.

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

Il doit s'agir d'un entier, je suppose que vous avez un ID primaire (itemId) qui peut identifier l'alarme A à partir de l'alarme B.

76
st0le

Vous pouvez configurer plusieurs alarmes en fournissant un code de demande différent dans pendingIntent.getBroadcast (......)

L'approche que j'ai utilisée pour configurer plusieurs alarmes est que j'ai créé une seule alarme. J'ai initialisé un entier statique dans la classe de réglage d'alarme qui sera incrémenté à chaque fois de mon activité principale chaque fois que je clique sur le bouton "ajouter une alarme" dans mon activité principale. Par exemple.

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