IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

declencher plusieurs alarmes


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 54
    Par défaut declencher plusieurs alarmes
    Voici mon code qui me permet d'appeler un BroadcastReceiver (ma classe AlarmReceiver) à une date donné (afin que celui-ci se charge de déclencher une notification)
    Le problème, c'est que si j'appelle plusieurs fois cette méthode la notification ne marche que pour le dernier appel, or j'aimerais pouvoir lancer plusieurs notification a des dates differentes.
    J'espere avoir été clair...
    Voyez-vous une solution ?
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     public void creerNotification(int id, int year, int month, int day, int hour, int minute)
        {
        	Calendar cal ;
    		AlarmReceiver receiver = new AlarmReceiver();
            IntentFilter filter = new IntentFilter("ALARM_ACTION");
            registerReceiver(receiver, filter);
            cal = Calendar.getInstance();
            cal.set(year, month, day, hour, minute);
     
            AlarmManager alarms = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
            Intent intent = new Intent("ALARM_ACTION");
     
    		intent.putExtra("id", id);
    		intent.putExtra("year", year);
    		intent.putExtra("month", month);
    		intent.putExtra("day", day);
    		intent.putExtra("hour", hour);
    		intent.putExtra("minute", minute);
    		PendingIntent operation = PendingIntent.getBroadcast(this, 0, intent, 0);
    		alarms.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), operation);
     
        }

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 54
    Par défaut
    je suis allé voir dans les flags de PendingIntent operation = PendingIntent.getBroadcast(this, 0, intent, flags); mais j'ai rien trouvé de concluant.
    J'ai essayé aussi d'ajouter intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_MULTIPLE_TASK ); mais dans ce cas rien ne se déclenche.

    Help me please !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 54
    Par défaut
    Je lis dans la doc de AlarmManager.set :
    If there is already an alarm scheduled for the same IntentSender, it will first be canceled.

    If there is already an alarm for this Intent scheduled (with the equality of two intents being defined by filterEquals(Intent)), then it will be removed and replaced by this one.

    comment me debrouiller alors pour que mes Intent ne soient pas "égaux" a chaque appel ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 54
    Par défaut
    finalement je me suis debrouillé en heritant la classe intent, ça a l'air de marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import android.content.Intent;
     
    public class IntentAlarm extends Intent {
     
    	public IntentAlarm(String action)
    	{
    		super(action);
    	}
     
    	public boolean filterEquals (Intent other) 
    	{
    		return false;
    	}
    }

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Par défaut
    Pouvez vous ajouter un bout de code expliquant comment mettre plusieurs alarmes par exemple un alarma 7h30 et 18h30 chaque jour.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 54
    Par défaut
    en fait l'intent n'y est pour rien c'est le 2eme champs de PendingIntent.getBroadcast(this, id, intent, 0); qui doit être unique, tout simplement.
    Je posterai un exemple dès que j'ai le temps.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 54
    Par défaut
    Voici un exemple pour lancer 2 alarmes à des dates données (attention le 11 correspond au moi de décembre, l'indexation commençant à 0). L'exemple est constitué de 2 classe, une activité et un BroadcastReceiver.
    Attention aussi, si on quitte l'activité l'alarme ne fonctionne plus, pour mon programme j'ai du lancer un service au démarrage du portable.

    Alors, l'activité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    import java.util.Calendar;
     
    import android.app.Activity;
    import android.app.AlarmManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.Bundle;
     
    public class Main extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            AlarmReceiver receiver = new AlarmReceiver();
            IntentFilter filter = new IntentFilter("ALARM_ACTION");
            registerReceiver(receiver, filter);
     
            ajouterAlarme(1, 2010, 11, 6, 21, 10);
            ajouterAlarme(2, 2010, 11, 6, 21, 11);
        }
     
        public void ajouterAlarme(int id, int year, int month, int day, int hour, int minute)
        {
        	Calendar cal = Calendar.getInstance();
            cal.set(year, month, day, hour, minute);
     
            AlarmManager alarms = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
            Intent intent = new Intent("ALARM_ACTION");
            intent.putExtra("year", year);
    		intent.putExtra("month", month);
    		intent.putExtra("day", day);
    		intent.putExtra("hour", hour);
    		intent.putExtra("minute", minute);
           PendingIntent operation = PendingIntent.getBroadcast(this, id, intent, 0);
    		alarms.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), operation);
     
        }
    }
    Et le broadcastreceiver (qui se contente d'afficher un toast à l'heure précisée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.Toast;
     
     
    public class AlarmReceiver extends BroadcastReceiver {
     
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		Toast.makeText(context, "alarm reçue", Toast.LENGTH_SHORT).show();
     
    	}
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création de plusieurs alarmes ?
    Par yrtera dans le forum Android
    Réponses: 2
    Dernier message: 23/03/2013, 19h45
  2. declencher par boucle plusieurs header location
    Par serna dans le forum Langage
    Réponses: 3
    Dernier message: 01/04/2010, 14h36
  3. Declencher plusieurs onmouseover
    Par AlexMetaleu dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 23/02/2010, 14h47
  4. Réponses: 5
    Dernier message: 15/05/2008, 16h07
  5. Shortcut avec plusieurs touches
    Par scorpiwolf dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/07/2002, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo