• Tag Archive | "reveil"

  • Tags: , , , , , , ,

    Motorola Milestone – Test du Dock

    Publié le 08 février 2010 par Cyril


    Après une longue rupture de stock, ous venons juste de recevoir le dock d’origine du Motorola Milestone et nous proposons un petit test pour ceux qui n’ont pas encore vu ce qu’il donnait.

    La station d’accueil Motorola permet de transformer votre Motorola Milestone en réveil, en lecteur mp3 ou bien encore en cadre photo.

    Ne vous attendez pas à du streaming en bluetooth ou encore à une sortie TV, le dock propose le strict minimum, il recharge votre terminal via son unique prise microUSB.

    Un système magnétique permet au Motorola Milestone de détecter qu’il est connecté à sa station d’accueil et une surchouche logicielle se lance automatiquement. Cette application réduit la luminosité de l’écran et affiche entre autres  l’heure, la date (pour les réveil de soirées difficiles) et la météo.

    On peut aussi se servir du dock pour lancer un enchaînement de photos ou encore écouter de la musique. Un bouton pour revenir à un niveau de luminosité normal et un accès rapide au réveil est aussi à l’écran.

    Bien que la station d’accueil soit de très bonne qualité et que sa finition soit parfaite, elle est quand même assez chère pour ce qu’elle propose. Pour ce qui est du packaging ne vous attendez à rien de bien consistant (même pas à un cable microUSB).

    Vous pouvez consulter nos photos en HD de la station d’accueil du Motorola Milestone sur la galerie Flickr.

    .

    Comments (12)

  • Tags: , , , ,

    Tutoriel | Faire vibrer le téléphone et lire mp3 au moment du reveil

    Publié le 10 janvier 2010 par Guy

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

    On m’a demander il y a quelque temps de faire un complément du tutoriel sur Développez votre propre réveil (Alarme) avec votre android phone. Dans ce tutoriel j’expliquais comment créer un réveil à une heure voulue. Le manque était qu’au réveil, il y avait juste un message qui s’affichait (c’était juste pour illustrer le tutoriel).

    On va donc maintenant voir en deux parties comment ajouter des vibrations et du son.

    Pour ajouter des vibrations lors du réveil il faut ajouter ce morceau de code (toujours dans la méthode onReceive):

    Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
    //vibre pendant 1 seconde, puis attend 1/2 secondes avant de recommencer.
    vibrator.vibrate(new long[]{0,1000,500,1000,2000}, -1);
    // ou vibre pendant 2 secondes.
    //vibrator.vibrate(2000);
    

    Explication

    1. On récupère une instance du service Vibrator.
    2. Pour faite vibrer le smartphone, il existe plusieurs surcharges de la méthode vibrate:
      1. Faire vibrer en suivant un pattern : vibrator.vibrate(new long[]{0,1000,500,1000,2000}, -1).
      2. Ici on fait vibrer de 0 à 1 seconde, puis une pause d’1/2 seconde, puis on recommence pendant 1 seconde.
        1. Le second paramètre correspond au nombre de fois que l’on doit répéter la séquence (-1 pour ne pas répéter).
        2. Le second paramètre correspond au nombre de fois que l’on doit répéter la séquence (-1 pour ne pas répéter).

    Pour ajouter un son il faut déjà ajouter dans le répertoire res/raw (ou créer ce repertoire si il n’existe pas encore)  le fichier son que vous voulez lire. Ensuite, ajouter le code (toujours dans la méthode onRecive):

    
    final MediaPlayer mp = MediaPlayer.create(context, R.raw.fichier_son);
    mp.start();
    Handler h = new Handler(){
    @Override
    public void handleMessage(Message msg) {
    if(msg.what==0){
    mp.stop();
    }
    super.handleMessage(msg);
    }
    };
    Message m = new Message();
    m.what = 0;
    h.sendMessageDelayed(m, 10000);
    

    Explication

    1. On commence par créer un objet MediaPlayer à partir du context et du fichier de resource.
    2. Puis on lance le son avec la méthode start();
    3. Pour aller plus loin, j’ai ajouter un handler qui permet de stopper la lecture après 10 secondes en utilisant un Handler.

    Comments (5)

  • Tags: , , , ,

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

    Publié le 26 novembre 2009 par Guy

    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)

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout android:id="@+id/RelativeLayout01"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:gravity="center">
        <CheckBox android:layout_height="wrap_content"
            android:layout_width="fill_parent" android:text="07:00" android:id="@+id/heure"
            android:textSize="40dip" android:gravity="center" android:onClick="changeHeure" />
    </RelativeLayout>
    

    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.

    @Override
    public void onCreate(Bundle savedInstanceState) {
    //Chargement des informations du reveil
    charger();
    
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    //Affichage
    affichage();
    
    //Planification
    planifierAlarm();
    }
    

    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

    
    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;
    }
    }
    

    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.

    
    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();
    }
    }
    

    Pour sauver les infos du réveil j’implémente la méthode sauver() :

    
    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();
    }
    }
    

    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é)

    
    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());
    }
    

    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.

    
    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();
    }
    

    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.

    
    @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();
    }
    

    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

    
    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();
    }
    }
    

    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

    
    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();
    }
    }
    }
    

    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.

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

    Dernière étape, le manifest :

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.bunjix.tuto.Reveil"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".Reveil"
                      android:label="@string/app_name" android:theme="@android:style/Theme.Light">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    <receiver android:name="com.bunjix.tuto.Reveil.AlarmReceiver" android:process=":remote" />
    <receiver android:name="com.bunjix.tuto.Reveil.AlarmBootReceiver">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                </intent-filter>
            </receiver>
        </application>
        <uses-sdk android:minSdkVersion="4" />
    
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
    </manifest>
    

    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

    Comments (7)


  • Wikio - Top des blogs title=


    téléphone portable