0

Dans l'activité principale de mon application, il y a deux champs de texte où les utilisateurs insèrent la date et l'heure et un bouton démarre. Lorsque le bouton Démarrer est cliqué, il appelle la méthode setProgrammedTimer de la classe broadcastReceiver qui définit une alarme à la date et l'heure insérées par les utilisateurs et à ces date et heure, l'application appelle le téléphone d'activité DIAL. Mais si j'insère une date et une fois et je clique sur le bouton de démarrage, et après j'insère une nouvelle date et heure et je clique sur le bouton de démarrage, l'application exécute seulement la deuxième alarme. comment puis-je faire pour exécuter les deux alarmes?comment régler plusieurs alarmes dans Android pour effectuer des opérations basées sur le temps en dehors de la durée de vie de mon application?

Ce bouton code de démarrage de l'activité principale:

start.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      year = Integer.valueOf(yearT.getText().toString()); 
      month = Integer.valueOf(monthT.getText().toString()); 
      day = Integer.valueOf(dayT.getText().toString()); 
      hour = Integer.valueOf(hourT.getText().toString()); 
      minute = Integer.valueOf(minuteT.getText().toString()); 
     timer.setProgrammedTimer(context,year,month,day,hour,minute); 

Ceci est le code BroadcastReceiver:

public class TimerBroadcast extends BroadcastReceiver { 

@Override 
public void onReceive(final Context context, Intent intent) { 

    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock"); 
    wl.acquire(); 
    Intent callIntent = new Intent(Intent.ACTION_DIAL); 
    callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(callIntent); 
    wl.release(); 

} 

public void setProgrammedTimer(Context context,int year, int month,int day, int hour, int minute){ 

    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(context,TimerBroadcast.class); 
    PendingIntent pi = PendingIntent.getBroadcast(context,0,intent, PendingIntent.FLAG_CANCEL_CURRENT); 
    Calendar cal = Calendar.getInstance(); 
    cal.setTimeInMillis(System.currentTimeMillis()); 
    cal.set(Calendar.YEAR,anno); 
    cal.set(Calendar.MONTH,mese-1); 
    cal.set(Calendar.DAY_OF_MONTH,giorno); 
    cal.set(Calendar.HOUR_OF_DAY,ora); 
    cal.set(Calendar.MINUTE,minuti); 
    cal.set(Calendar.SECOND,0); 
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi); 
} 

Répondre

0

Lorsque vous ajoutez la deuxième alarme que vous annulez la première.

PendingIntent pi = PendingIntent.getBroadcast(context,0,intent, PendingIntent.FLAG_CANCEL_CURRENT); 

Remarque FLAG_CANCEL_CURRENT.

+0

alors je dois enlever ce drapeau et cela fonctionne? – paniko

+0

pourquoi demander ici? essayez-le vous-même. – Okas