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 :

Lancement activité sur appareil en veille


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Par défaut Lancement activité sur appareil en veille
    Bonjour,

    Dans l'appli que je développe sur Galaxy S2 rooté, je mets en place une alarme avec ... AlarmManager.RTC_WAKEUP ...
    Dans le manifest j'ai déclaré le receiver adhoc.
    Dans un BroadcastReceiver qui capte l'alarme je fais un : startActivity(intent) vers une activité, par exemple télécharger une mise à jour de données.

    Tout fonctionne parfaitement si l'alarme est réglée pour un déclenchement quelques minutes après un arrêt de mon appli.
    Mais, et c'est mon problème, si mon téléphone est sans activité depuis un certain temps (Typiquement la nuit) rien ne se passe !

    J'ai essayé d'utiliser ... newWakeLock(PowerManager.PARTIAL_WAKE_LOCK ... (Avec android.permission.WAKE_LOCK) sans succès !

    Merci de me mettre sur la piste d'une solution.

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Par défaut
    Le problème est résolu.
    Comme indiqué dans ma question, c'est bien "AlarmManager.RTC_WAKEUP" qu'il faut utiliser, mais il fallait en plus indiquer la répétition et l'intervalle. Comme ceci :

    "alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pendingIntent);"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	// Mise en place des alarmes dans l'AlarmManager
    	private void setAlarm(int id, int heure, int min, int sec) { 
    		// Transformation en millisecondes du moment de l'alarme 
    		Calendar cal = Calendar.getInstance();
    		cal.set(Calendar.HOUR_OF_DAY,heure);
    		cal.set(Calendar.MINUTE,min);
    		cal.set(Calendar.SECOND,sec);	
     
    		// Passer à l'Alarme Manager le moment de l'alarme pour l'id donnée et répéter l'alarme tous les jours (setRepeating et INTERVAL_DAY)
    		Intent intent = new Intent(getBaseContext(), AlarmeReceiver.class);
    		PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), id, intent, 0);
    		AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    		alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pendingIntent); // RTC_WAKEUP : sortir l'appareil, si besoin, de veille
    }
    En effet, supposons qu'il soit 18h00 et que l'on règle, pour tous les jours, une alarme à 22h00 et une autre pour 04h00 du matin. Supposons aussi qu'après ce réglage l'appareil passe en veille.
    Sans la répétition et l'intervalle, l'alarme de 22h00 fonctionnera (Elle est du même jour et le RTC_WAKE_UP fera son travail) mais l'alarme de 04h00 ne fonctionnera pas car elle sera considérée comme passée et non du lendemain !
    C'est là où le setRepeating et le INTERVAL_DAY vont régler le problème ...

    Simple ? Peut-être, mais cela va tellement mieux en le disant !

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Par défaut
    Le problème est résolu.
    Comme indiqué dans ma question, c'est bien "AlarmManager.RTC_WAKEUP" qu'il faut utiliser, mais il fallait en plus indiquer la répétition et l'intervalle. Comme ceci :

    "alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pendingIntent);"

    Voici le code complet de la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	// Mise en place des alarmes dans l'AlarmManager
    	private void setAlarm(int id, int heure, int min, int sec) { 
    		// Transformation en millisecondes du moment de l'alarme 
    		Calendar cal = Calendar.getInstance();
    		cal.set(Calendar.HOUR_OF_DAY,heure);
    		cal.set(Calendar.MINUTE,min);
    		cal.set(Calendar.SECOND,sec);	
     
    		// Passer à l'Alarme Manager le moment de l'alarme pour l'id donnée et répéter l'alarme tous les jours (setRepeating et INTERVAL_DAY)
    		Intent intent = new Intent(getBaseContext(), AlarmeReceiver.class);
    		PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), id, intent, 0);
    		AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    		alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pendingIntent); // RTC_WAKEUP : sortir l'appareil, si besoin, de veille
          }
    En effet, supposons qu'il soit 18h00 et que l'on règle, pour tous les jours, une alarme à 22h00 et une autre pour 04h00 du matin. Supposons aussi qu'après ce réglage l'appareil passe en veille.
    Sans la répétition et l'intervalle, l'alarme de 22h00 fonctionnera (Elle est du même jour et le RTC_WAKE_UP fera son travail) mais l'alarme de 04h00 ne fonctionnera pas car elle sera considérée comme passée et non du lendemain !
    C'est là où le setRepeating et le INTERVAL_DAY vont régler le problème ...

    En espérant que ces précisions puissent aider quelqu'un ...

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

Discussions similaires

  1. VTY sur appareil CISCO
    Par Mut dans le forum Hardware
    Réponses: 2
    Dernier message: 21/09/2006, 15h18
  2. [M2]Recherche plugin d'activité sur un projet ?
    Par elitost dans le forum Maven
    Réponses: 12
    Dernier message: 12/07/2006, 14h39
  3. Lancement fichier sur cd
    Par bruno06 dans le forum Windows
    Réponses: 3
    Dernier message: 01/04/2006, 15h13
  4. PB lancement PostgreSQL sur Debian Sarge
    Par Invité dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 24/11/2005, 20h15
  5. Fermeture et delay de lancement application sur dos
    Par jason59 dans le forum Windows
    Réponses: 5
    Dernier message: 18/09/2005, 21h01

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