• Home
  • Youzik
  • Papystreaming
  • Darknet
  • Libertyland
  • Cacaoweb
  • GG maps
  • Yggtorrent
  • Zone téléchargement

Grimag

  • Accueil
  • Catégories
    • Smartphone
    • High Tech
    • Business
    • Web
    • Appli Jeux Vidéo
    • Shopping
  • Android c’est quoi ?
  • Nous Contacter
  • Nos comparatifs
    • Drone avec caméra
    • Clavier d’ordinateur
    • Onduleur
    • GPS
    • Répéteur WiFi

Développez votre propre réveil (Alarme) avec votre android phone



Ce tutoriel est réalisé et proposé par bunjix, développeur d’application sous Android. Vous pouvez voir son blog sur http://bunjix.fr.

Dans ce tuto je vais créer un réveil simple. Le but est de montrer comment se passe l’activation d’une alarme à une heure voulue.

D’abord mon fichier XML pour l’affichage de mes informations (très simple)

[sourcecode language=’xml’]



[/sourcecode]

Pour réaliser ce  réveil j’utilise la classe AlarmManager. Dans ma méthode onCreate j’ai 3 étapes:

1. Je charge les informations du réveil (voir plus bas pour l’explication).
2. Je gère l’affichage
3. Je planifie l’alarme.

[sourcecode language=’java’] @Override
public void onCreate(Bundle savedInstanceState) {
//Chargement des informations du reveil
charger();

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//Affichage
affichage();

//Planification
planifierAlarm();
}

[/sourcecode]

Pour que le réveil soit fonctionnel, je souhaite qu’il se réactive si je reboot mon téléphone. Il faut donc que je sauvegarde l’heure de mon réveil et ses informations. Pour cela j’ai créé une classe Alarm qui implémente Serializable

Code classe Alarm

[sourcecode language=’java’]

import java.io.Serializable;
import android.text.format.Time;

public class Alarm implements Serializable{
private static final long serialVersionUID = 1L;
private Time heure;
private boolean active;
public Time getHeure() {
return heure;
}
public void setHeure(Time heure) {
this.heure = heure;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
}

[/sourcecode]

Pour charger les informations du réveil, j’ai donc la fonction charger. La fonction tente de charger l’objet Alarm Serialisé dans le fichier alarm.serial.  Si ce fichier n’existe pas encore, on créer une alarm activé avec une heure fixée à 7h30.
[sourcecode language=’java’]

public void charger(){
alarm = null;
try {
ObjectInputStream alarmOIS= new ObjectInputStream(openFileInput(“alarm.serial”));
alarm = (Alarm) alarmOIS.readObject();
alarmOIS.close();
}
catch(FileNotFoundException fnfe){
alarm = new Alarm();
alarm.setActive(true);
Time t = new Time();
t.hour = 7;
t.minute = 30;
alarm.setHeure(t);
}
catch(IOException ioe) {
ioe.printStackTrace();
}
catch(ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
}

[/sourcecode]

Pour sauver les infos du réveil j’implémente la méthode sauver() :
[sourcecode language=’java’]

public void sauver(){
try {
ObjectOutputStream alarmOOS= new ObjectOutputStream(openFileOutput(“alarm.serial”,MODE_WORLD_WRITEABLE));
alarmOOS.writeObject(alarm);
alarmOOS.flush();
alarmOOS.close();
}
catch(IOException ioe) {
ioe.printStackTrace();
}
}

[/sourcecode]

Toujours dans mon Activity j’ai ma fonction affichage qui affiche simplement les informations du réveil (l’heure et l’état : activé/désactivé)
[sourcecode language=’java’]

private void affichage() {
//Ici on a juste voulu créer un affichage de l’heure qui soit au format hh:mm.
String heureReveil = “”;
heureReveil += alarm.getHeure().hour >10 ? alarm.getHeure().hour : “0” + alarm.getHeure().hour;
heureReveil +=”:”;
heureReveil += alarm.getHeure().minute >10 ? alarm.getHeure().minute : “0” + alarm.getHeure().minute;
CheckBox ck_alarm = (CheckBox)findViewById(R.id.heure);
ck_alarm.setText(heureReveil);
ck_alarm.setChecked(alarm.isActive());
}

[/sourcecode]

Dans le fichier layout.xml qu’on peut voir au début, vous constaterez que pour la CheckBox, j’ai réglé l’attribut onClick (à partir de Android 1.6) avec la valeur changeHeure. Je dois donc implémenter la fonction :
Cette fonction se déclenchera donc au clic sur la checkbox ou l’heure. Elle s’occupera d’activer l’alarme ou de la désactiver. Si l’alarme passe en mode activée alors on affichera un TimePickerDialog afin de choisir l’heure.
Puis on replanifiera l’alarme.

[sourcecode language=’java’]

public void changeHeure(View target){
CheckBox ck_alarm = (CheckBox)findViewById(R.id.heure);
//Si on active l’alarm alors on veut choisir l’heure.
if(ck_alarm.isChecked()){
TimePickerDialog dialog = new TimePickerDialog(this, this, alarm.getHeure().hour, alarm.getHeure().minute, true);
dialog.show();
}
//On replanifie l’alarme.
planifierAlarm();
}

[/sourcecode]

Le deuxième argument du constructeur du TimePickerDialog correspond au callback, le listener OnTimeSetListener qui se déclenche à la validation de la nouvelle heure.
Notre activity implémente donc cette interface et nous avons donc la fonction OnTimeSet qui va changer l’heure de notre objet alarm et replanifier l’alarme.
[sourcecode language=’java’]

@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Time t = new Time();
t.hour = hourOfDay;
t.minute = minute;
alarm.setHeure(t);
affichage();
planifierAlarm();
}

[/sourcecode]

Pour finir avec notre activity, nous avons la fameuse fonction planifierAlarm. Cette fonction va simplement supprimer (si elle existe) puis ajouter notre alarme dans le service AlarmManager.
Plusieurs étapes :

1. On récupère une instance du service AlarmManager
2. On crée un Intent qui va être appelé au déclenchement de l’alarme.
3. On crée le PendingIntent qui identifie notre Alarm avec un ALARM_ID (champ static de notre Activity)
4. On annule l’alarme si elle existe dans l’AlarmManager
5. Ajout de l’alarme

[sourcecode language=’java’]

private void planifierAlarm() {
//Récupération de l’instance du service AlarmManager.
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

//On instancie l’Intent qui va être appelé au moment du reveil.
Intent intent = new Intent(this, AlarmReceiver.class);

//On créer le pending Intent qui identifie l’Intent de reveil avec un ID et un/des flag(s)
PendingIntent pendingintent = PendingIntent.getBroadcast(this, ALARM_ID, intent, 0);

//On annule l’alarm pour replanifier si besoin
am.cancel(pendingintent);

if(alarm.isActive()){
//on va déclencher un calcul pour connaitre le temps qui nous sépare du prochain reveil.
Calendar reveil = Calendar.getInstance();
reveil.set(Calendar.HOUR_OF_DAY, alarm.getHeure().hour);
reveil.set(Calendar.MINUTE, alarm.getHeure().minute);
if(reveil.compareTo(Calendar.getInstance()) == -1)
reveil.add(Calendar.DAY_OF_YEAR, 1);
Calendar cal = Calendar.getInstance();
reveil.set(Calendar.SECOND, 0);
cal.set(Calendar.SECOND, 0);
long diff = reveil.getTimeInMillis() – cal.getTimeInMillis();

//On ajoute le reveil au service de l’AlarmManager
am.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis() + diff, pendingintent);
Toast.makeText(this, “Alarme programmé le ” + reveil.get(Calendar.DAY_OF_MONTH) + ” à ” + reveil.get(Calendar.HOUR_OF_DAY) + “:” + reveil.get(Calendar.MINUTE), Toast.LENGTH_SHORT).show();
}
}

[/sourcecode]

Il nous reste donc maintenant à écrire la classe AlarmReceiver qui va être déclenché au moment du réveil. Cette classe doit dériver de BroadcastReceiver

[sourcecode language=’java’]

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) {
try {
Toast.makeText(context, “C’est l’heure !!!”,Toast.LENGTH_LONG).show();
//On peut mettre ce que l’on veut. Vibreur, lecture d’un mp3 ou autre.
}
catch (Exception r) {
Toast.makeText(context, “Erreur.”,Toast.LENGTH_SHORT).show();
r.printStackTrace();
}
}
}

[/sourcecode]

On peut également créer une autre classe AlarmBootReceiver qui va être déclenché au démarrage du téléphone afin de recharger notre réveil.
Cette classe contient également les méthodes charger et planifierAlarm.

[sourcecode language=’java’]

public class AlarmBootReceiver extends BroadcastReceiver{
Alarm alarm;
Context context;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
charger();
planifierAlarm();
}

…
}

[/sourcecode]

Dernière étape, le manifest :
[sourcecode language=’XML’]

















[/sourcecode]

code complet

Note de Guy : Ce tuto nous donne toute la panoplie des méthodes  pour réaliser un réveil.  merci à bunjix pour ce tuto

Nov 26, 2009Gnakouri Danon

Ces articles pourraient vous intéresser :

  • Tutoriel | Faire vibrer le téléphone et lire mp3 au moment du reveilTutoriel | Faire vibrer le téléphone et lire mp3 au moment du reveil
  • Développez une application pour android étape 21 (Modifier un ingrédient avec une boite de dialogue)Développez une application pour android étape 21 (Modifier un ingrédient avec une boite de dialogue)
  • Passer des variables entre Activity sous androidPasser des variables entre Activity sous android
  • Créer son propre menu de lancement comme la home avec SlidingDrawerCréer son propre menu de lancement comme la home avec SlidingDrawer
  • Utiliser l’accéléromètre d’android dans ses applicationsUtiliser l’accéléromètre d’android dans ses applications
  • Développez des diagrammes de barres statistiques dans vos applications AndroidDéveloppez des diagrammes de barres statistiques dans vos applications Android
  • Tuto – Faite parler votre Android Phone dans vos applicationsTuto – Faite parler votre Android Phone dans vos applications
  • Utiliser du code HTML dans ses applications androidUtiliser du code HTML dans ses applications android
  • Développez une application pour android étape 19 (Ajout de sous menu)Développez une application pour android étape 19 (Ajout de sous menu)
  • Développer la fonction shake (secouer) dans vos applications AndroidDévelopper la fonction shake (secouer) dans vos applications Android
  • Développer votre application de réalité augmentée avec l’API de WikitudeDévelopper votre application de réalité augmentée avec l’API de Wikitude
  • Utiliser la camera dans vos applications androidUtiliser la camera dans vos applications android
  • Tutoriel sur la création d’un menu personnalisé pour une application – Part 1 le graphismeTutoriel sur la création d’un menu personnalisé pour une application – Part 1 le graphisme
  • Formation vidéo – Comment devenir un développeur Android ?Formation vidéo – Comment devenir un développeur Android ?
  • Développez avec la plate forme Polymer de Google – TUTO 1 Votre environnement de travailDéveloppez avec la plate forme Polymer de Google – TUTO 1 Votre environnement de travail
  • Développez avec la plate forme Polymer de Google – TUTO 4 Polymer et fichier json part IIDéveloppez avec la plate forme Polymer de Google – TUTO 4 Polymer et fichier json part II
  • Développez avec la plate forme Polymer de Google – TUTO 2 ma première WebAppDéveloppez avec la plate forme Polymer de Google – TUTO 2 ma première WebApp
  • TutoMobile.fr – Un site prometteur de tutoriels AndroidTutoMobile.fr – Un site prometteur de tutoriels Android
  • Intégrer des pub Admob dans ses applications AndroidIntégrer des pub Admob dans ses applications Android
  • Développez avec la plate forme Polymer de Google – TUTO 4 Polymer et fichier json part IDéveloppez avec la plate forme Polymer de Google – TUTO 4 Polymer et fichier json part I
  • Développez votre propre boussoleDéveloppez votre propre boussole
  • Intégrer les pub de Greystripe.com dans vos applications androidIntégrer les pub de Greystripe.com dans vos applications android
  • Développement-Utiliser la liste de ses contacts dans ses applications AndroidDéveloppement-Utiliser la liste de ses contacts dans ses applications Android
  • Tuto Skype – La messagerie vidéo en testTuto Skype – La messagerie vidéo en test

Partager :

  • Cliquez pour partager sur Twitter(ouvre dans une nouvelle fenêtre)
  • Cliquez pour partager sur Facebook(ouvre dans une nouvelle fenêtre)
  • Cliquez pour partager sur Google+(ouvre dans une nouvelle fenêtre)
  • Cliquez pour partager sur Reddit(ouvre dans une nouvelle fenêtre)
  • Plus
  • Cliquez pour envoyer par e-mail à un ami(ouvre dans une nouvelle fenêtre)
  • Cliquer pour imprimer(ouvre dans une nouvelle fenêtre)
  • Cliquez pour partager sur Pinterest(ouvre dans une nouvelle fenêtre)
  • Cliquez pour partager sur Pocket(ouvre dans une nouvelle fenêtre)


Les appels vidéo sous Android gratuitement avec Fring ?Ustream débarque sur Android et vous permet partager votre vidéo en live
  • Benjamin

    Fier d’avoir été invité a réaliser ce tuto.
    Merci à Guy également.

  • sangorys

    Merci pour ce tuto 🙂

    Une petite question : pourquoi le receiver est déclaré en remote ?

    Ca veut dire quoi remote pour un receiver ou un service ?

  • Nekloth

    Ca marche, merci !

    Par contre, je n’arrive pas à lancer une nouvelle activité ici:
    //On peut mettre ce que l’on veut. Vibreur, lecture d’un mp3 ou autre.

    J’ai mis
    Intent intentToLaunch = new Intent();
    intentToLaunch.setClass(context, myActivity2.class);
    context.startActivity(intentToLaunch);

    mais cela lève une exception

    L’un de vous a réussi ??

    Merci !

  • Benjamin

    Salut Nekloth,
    La réponse à ta question est sur mon site

  • cad13

    Désolé Benjamin, mais je n’arrive pas à reconstruire le puzzle du code. Serait-il possible de mettre en téléchargement le code source complet (en fait j’ai pas mal d’erreurs et je pense que c’est parce que je n’ai pas fait les bons fichiers)…
    Merci

  • sangorys

    S’il vous plait,

    est-ce que qqn peut expliquer ce que signifie android:process=”:remote” dans le manifest ?

    Merci

  • jekho

    Super tuto,

    mais j’ai une question quand tu fais le am.set() :
    le temps que tu mets, c’est :
    cal.getTimeInMillis() + diff
    où le diff c’est :
    reveil.getTimeInMillis() – cal.getTimeInMillis();
    ce qui revient à mettre en paramètre seulement reveil.getTimeInMillis()
    Mais au final, il faut lui renseigner quoi comme paramètre : la date à laquelle ca va sonner où le temps qui lui reste avant que ca sonne ??

  • Lucas

    Il ne se lance pas quand le téléphone est en sleep ou j’ai raté qqchose?
    Merci de vos réponses

  • ugg outlet online

    ugg outlet online with regard to women and men all over the world provides. You can state how the Milan runway with regard to viewers within Sydney, uggs boot informal turn to supply broadly wellliked. Informal wool enables atmosphere in order to move not just in a position to remain dried out feets however watermark free of charge. These types of boot are supplied along with thermostatic sheepskin, all over the world provides boot with regard to women and men keepiUggs. Ugg informal consumers ought to appear expert in addition to providing you with the actual as soon as wellknown with regard to putting on their own items. You can state which Milan runway with regard to viewers within Sydney, offers broadly wellliked informal boot uggs appear. Informal atmosphere as the wool in order to dried out feets liberated to transmit not just enables the actual watermark.

  • ukraine escort

    You should truly consider focusing on increasing this site into a significant recognition on this market place. People certainly use a understanding deal with of your things everyone seems to be seeking with this web site at any rate and also you might surely also make a $ as well as 2 away from quite a few campaign. I’d personally explore following latest themes along with rearing how much write fedex you put up and that i assure you?d start finding a few amazing targeted traffic before long. A thought, best of luck with whatever you decide to do!

  • Luc

    Bonjour,

    même question que Nekloth

    je n’arrive pas à lancer une nouvelle activité ici:
    //On peut mettre ce que l’on veut. Vibreur, lecture d’un mp3 ou autre.

    merci !

  • messimensi

    bonjour
    Merci pour le tuto
    J’ai le même problème que Luc j’arrive pas à déclencher le vibreur ou le son dans la classe AlarmeReciver SVP j’ai besoin de l’aide mon PFE dans 20 jours MERCI

  • Rygel

    merci beaucoup pour ce tutoriel, tout fonctionne chez moi à la perfection. Thanks guys

Gnakouri Danon

Co-fondateur du site Android france, senior lead developper, passionné de bière et de cigare cubain

26 novembre 2009 Developpement, Tuto développementalarm, Developpement, reveil, tuto, Tutoriel4,938

2021 © Android-France
loading Annuler
L'article n'a pas été envoyé - Vérifiez vos adresses e-mail !
La vérification e-mail a échoué, veuillez réessayer
Impossible de partager les articles de votre blog par e-mail.