• Tag Archive | "Tutoriel"

  • Tags: , , , ,

    Tutoriel sur la création d’un menu personnalisé pour une application – Part 1 le graphisme

    Publié le 17 octobre 2011 par Guy


    En collaboration avec orkcreation.fr éditeur de l’application Orkcreation (Fond d’écran originaux pour votre Androphone) nous vous proposons un tutoriel de création d’un menu personnalisé sous Android en deux étapes. Première étape la création du graphisme, deuxième étape l’implémentation en programmation de ce menu.

    Vous voulez commencer à créer une application Android ?

    Voici un premier tutoriel sur la création d’un menu basique pour votre application. 

    Remarque : Avant de commencer ce tutoriel, il faut savoir que je vous proposerai un menu simple ! Avec la base graphique, vous pourrez continuer votre création.
    Remarque 2 : De plus, le tutoriel a été réalisé sous le logiciel Photoshop CS5. Les anciennes versions sont équivalentes.

    Le résultat final :

    image1 Tutoriel sur la création d’un menu personnalisé pour une application   Part 1 le graphisme Android France
    .
    I – L’attaque des arrières plans.

     

    + En premier lieu, on commence par prendre le premier calque qu’on nommera AP1 (pour Arrière Plan #1) et on ajoute un gris sombre de code #1F1F1F.

    Aucun dégradé n’a été appliqué pour la simple et bonne raison que le développement d’un dégradé n’est pas simple surtout pour un arrière plan.

    + Pour continuer, on créer un nouveau calque pour ajouter une barre rectangulaire de  couleur : #494949. J’ai nommé ce calque « AP2 » pour bien le différencier avec le premier arrière plan.
    On lui applique un dégradé simple avec comme paramètres :

    .
    image2 Tutoriel sur la création d’un menu personnalisé pour une application   Part 1 le graphisme Android France

    .

    Remarque 3 : ce dégradé permet d’affiner le futur rendu. Les paramètres ci-dessus ne sont que des exemples ; libre à vous de jouer avec les réglages.
    Cette barre sera placée vers le haut selon votre envie. Pour ma part, je l’ai ajouté à une dizaine de pixels

    + J’ai ajouté sur ce rectangle un contour en haut d’un pixel gris clair (#5D5D5D) pour accentuer la séparation du menu à l’arrière plan.
    Pour ce faire, on créer un nouveau calque qu’on nommera « barre blanche » pour ensuite prendre l’outil Trait (raccourci U) et étirer un jolie trait en restant appuyer sur SHIFT pour qu’il reste droit.

    Pour l’instant j’obtiens ceci :

    image3 Tutoriel sur la création d’un menu personnalisé pour une application   Part 1 le graphisme Android France

    .

    Je dois l’avouer, ce n’est pas très coloré mais on commence toujours par une base. Pour l’instant seul le gris domine mais vous allez comprendre pourquoi …

    II – Quand on ajoute la couleur.

    La deuxième partie va permettre d’accentuer notre menu !

    + On ouvre un nouveau calque qu’on nommera par exemple « bleu » pour ajouter un nouveau rectangle bleu (#3592d9) qu’on va positionner tout en bas de notre deuxième arrière plan gris (la base du menu).
    On lui ajoute également un dégradé très léger d’opacité 14% avec un mode de fusion en lumière tamisée.

    Ainsi, le rectangle bleu sera moins agressif et permettra de délimiter de nouveau le menu par rapport au reste du design.

    + On arrive au moment de l’ajout des titres. Pour ce tutoriel, j’ai pris deux titres : « ACCUEIL » et « MA GALERIE ».
    La police utilisée est TW CENT MT en mode « BOLD » et de taille 20px.
    Je les ai positionnés au centre du menu comme ceci :

    image4 Tutoriel sur la création d’un menu personnalisé pour une application   Part 1 le graphisme Android France

    Remarque 4 : Vous pouvez vous amuser à ajouter de la couleur, ajouter des dégradés ou autre à votre typographie. Pour ma part, le blanc est net et sobre … du coup j’ai préféré ne rien ajouter mais ce n’est que mon avis.

    + Pour savoir où l’on est sur l’application, il est toujours bien d’ajouter un petit plus à ce menu.
    Il existe diverses solutions et j’ai choisi d’ajouter un rectangle à bord arrondi derrière la typographie du menu.

    Pour cela, ouvrez un nouveau calque (nommé « Où est-on ? ») et appliquez lui un rectangle à bord arrondi (raccourci U). Ajoutez ce rectangle de façon qu’il englobe toute la partie du texte comme ci-dessous :

    image5 Tutoriel sur la création d’un menu personnalisé pour une application   Part 1 le graphisme Android France

    Après l’avoir englouti, mettez-le en mode Lumière Tamisée, d’opacité 70% et de fond 50%.
    Placez-le derrière le calque texte.
    On obtient le rendu suivant :

    image6 Tutoriel sur la création d’un menu personnalisé pour une application   Part 1 le graphisme Android France

    III – On chipote.

    Le tutoriel touche à sa fin. Comme vous avez pu le constater, ce menu est simple mais très efficace ! Il faut penser qu’on sera sur un androphone et que la résolution de l’écran n’est pas celui de vos ordinateurs ! Il faut donc adapter.
    Mais nous pouvons continuer de peaufiner ce menu (ceci est subsidiaire) :

    Avant de continuer, prenez l’image « petitplus.png » et ouvrez là sur Photoshop. Des lignes s’ouvrent … Mais à quoi vont-elles servir ?
    Allez dans EDITION et cliquez sur UTILISER COMME MOTIF. Ajoutez-lui le nom de votre choix… cela n’a peu d’importance.

    + Retournez sur votre création de menu et créez un nouveau calque que j’ai nommé    « le petit plus ».
    Allez dans EDITION puis cliquez sur REMPLIR.
    Dans « contenu », mettez MOTIF et comme MOTIF PERSONNALISE, allez chercher votre motif que vous venez tout juste de créer (voir 6 lignes au dessus) et cliquez sur OK.

    image7 Tutoriel sur la création d’un menu personnalisé pour une application   Part 1 le graphisme Android France

    AÏE ! Pleins de traits en diagonales apparaissent…

    + Pas de panique, il vous suffit de prendre l’outil Rectangle de Sélection (Raccourci M) et de sélectionner la partie bleue de votre menu.
    Cliquez sur : CTRL + I pour inverser la sélection précédente et faites supprimer.

    Il vous suffit enfin de mettre ce calque en mode Produit, d’opacité 40% et de fond 30%.

    Voilà, le tutoriel sur la réalisation d’un menu est maintenant fini.
    Bien entendu, vous pouvez continuer à personnaliser votre menu ; le tutoriel permet de montrer les bases nécessaires.
    Pour le rendu final, voir tout en haut.

    Page facebook du projet et le compte twitter.
    Télécharger le fichier psd ici

    Comments (4)

  • Tags: , , , , , ,

    HTC Desire – Les solutions…

    Publié le 15 juin 2011 par Julien

    Depuis hier, les commentaires vont bon trains sur l’annulation de Gingerbread officielle sur Desire premier du nom. Mais comme on est sur Android, après tout, on s’en fiche de ce que HTC pourra ou ne pourra pas faire. C’est juste leur image qui se dégrade auprès du client. Petit billet pour résumer les méthodes pour personnaliser vos Desire.

    La simplicité

    • Téléchargez z4root ou UniversalAndroot sur le market ou sur XDA.
    • Rootez.
    • Téléchargez ROM Manager. Flashez le bootloader alternatif à l’intérieur de l’application.
    • ENJOY

    Les mains dans le cambouis

    Les crédits pour cette solution plus pointue reviennent à un de nos lecteurs qui a eu la gentillesse de faire un post plutôt détaillé avec plein de liens. Je vous copie son message un peu mis en page.

    Pour ceux qui comme moi aiment l’expérience HTC sense je vous conseille d’aller faire un tour sur ce site pour rooter son HTC Desire et celui-ci pour passer en S-off (ceci permet une plus grande flexibilité qu’avec le root seul).

    Pour le S-off :
    /!\ sous linux virtualBox-OSE ne fonctionne pas pour cette méthode
    /!\ certaines custom ROMs font planter le script (j’ai utiliser la room oxygen et aucun soucis)

    Pour ma ROM custom j’ai utilisé la rom AceSMod007 qui est une rom Sense avec certaines fonctionnalités de Sense 3.0 (l’interface du HTC Sensation avec le ring très pratique). Elle est stable et pas trop gourmande en énergie.

    Un dernier lien, c’est un récapitulatif des custom ROM en français (moins complet) et en anglais.

    Merci dont à lelouar pour ces informations, qui, nous l’espérons, pourront vous être utiles. N’hésitez pas cependant à râler auprès de HTC, ça ne servira peut-être à rien, mais ça fait toujours du bien.

     

     

    Comments (15)

  • Tags: , , , , , ,

    Wake On Wan + Teamviewer + Android = Win

    Publié le 26 mars 2011 par Julien

    C’est vendredi soir et vous avez envie de bidouiller un petit peu avant de partir en week-end ? Ca tombe bien, je vais vous expliquer mon trip-de-la-semaine © et espérer vous donner envie de jouer avec chez vous. Peut-être allez-vous découvrir des possibilités cachées de votre smartphone.

    Ce que je vous propose, c’est de réveiller votre ordinateur à distance et d’en prendre le contrôle, tout ça avec votre smartphone Android et de la 3G+. J’ai fait ça sur Windows 7 Premium avec une Freebox V6 et un bios Asus, la carte réseau étant intégrée à la carte mère (P6T).

    1 – La configuration préalable de l’ordinateur.

    D’abord, nous allons avoir besoin de faire quelques préparatifs :

    • Installez Teamviewer si ce n’est pas déjà fait, et surtout créez-vous un compte, sans quoi votre identifiant “partenaire” changerait tout le temps. Teamviewer a la bonté d’être disponible sous Windows, Mac Os et Linux, du coup, pas de jaloux. Familiarisez vous avec l’interface et définissez votre ordinateur comme un partenaire, ajoutez un mot de passe fixe, et ce sera tout pour le moment.
    • Ouvrez un terminal (ou tapez “cmd” dans la barre de recherche Windows) et tapez “ipconfig /all”
    • Notez l’adresse MAC ou adresse physique qui correspond à votre ordinateur, le truc entouré sur le screenshot.

    realtek Wake On Wan + Teamviewer + Android = Win Android France

    • Notez de même votre adresse IP. Si vous avez du mal à trouver laquelle, faites un tour ici.
    • Installez Teamviewer et Wake on Lan sur votre smartphone Android. Teamviewer ne se trouve qu’en .apk sur leur site.

    2 -Voilà, maintenant passons à la configuration du BIOS

    • Sur votre ordinateur, allez dans le BIOS avant que le système d’exploitation ne se lance (la touche s’affiche un court instant au démarrage, il faut être rapide, c’est souvent un F quelque chose ou Suppr)
    • Vous trouverez un onglet “gestion de l’alimentation” ou assimilé. Il faudra passer l’option “Wake On Lan” ou “Wake on PME” ou “Wake on PCI card”, bref, ce qui vous semble cohérent, de “disabled” à “enabled”.
    • Sauvez et quittez.

    3 – Configurons la carte réseau et le reste de l’ordinateur.

    • Sous Windows 7, il vous faudra aller dans le “Gestionnaire de périphériques”, faire un clic droit sur votre carte réseau, “Propriétés”, aller dans “Avancé” et passer toutes les options ayant un rapport avec “Wake On Lan” à “activer”. Sur la mienne, voilà à quoi ressemble la procédure :

    realtek2 Wake On Wan + Teamviewer + Android = Win Android France

    One…

    realtek3 Wake On Wan + Teamviewer + Android = Win Android France

    …two…

    realtek4 Wake On Wan + Teamviewer + Android = Win Android France

    three.

    • Avec ça, on pourra allumer l’ordinateur, mais s’il y a une session active, ce ne sera pas possible d’accéder à Teamviewer… du coup, il faut, sous Windows 7, sacrifier l’écran d’accueil. Pour ce faire, tapez “exécuter” dans la barre de recherche, puis dans la fenêtre qui s’ouvre “control userpasswords2″ et décochez la seule case possible (screenshot).

    décocher Wake On Wan + Teamviewer + Android = Win Android France

    • Enfin, il vous faudra aller dans l’interface utilisateur de la Freebox ou de votre box/routeur pour l’activer en tant que Proxy Wake On Lan. Pour la Freebox V6, cela se trouve sur http://mafreebox.free.fr.

    freebox Wake On Wan + Teamviewer + Android = Win Android France

    • Redémarrez votre box, même si votre abrutie de freebox vous dit que c’est bon.

    4 – Maintenant, la magie.

    • Eteignez votre ordinateur.
    • Dans l’application Wake On Lan, renseignez les informations que vous avez notées plus haut : l’adresse physique dans le “MAC”, l’ip dans sa case, le port, mettez 7 ou 9, cochez “envoyer en broadcast”, mettez 255.255.255.0 ou 255.255.255.255 selon votre masque de sous-réseau (si vous ne savez pas, testez les deux).
    • Enregistrez et envoyez les paquets : votre ordinateur démarre. Note : vous devez être ailleurs que sur votre Wifi pour que cela fonctionne, 3G, G, Edge, le wi-fi d’un voisin…
    • Votre ordinateur va s’allumer, Teamviewer se lancera automatiquement au démarrage (s’il ne le fait pas, c’est une option à cocher), et sur votre smartphone, vous lancerez l’application Teamviewer.
    • Allez dans “Liste des Partenaires” et entrez vos informations.
    • Dans “Mes Partenaires”, sélectionnez le code de votre ordinateur, entrez le mot de passe fixe configuré.
    • GEEKTIME !

    Amusez vous bien icon smile Wake On Wan + Teamviewer + Android = Win Android France .

    Comments (42)

  • Tags: , , , , , , ,

    Android-France – Le forum (bis)

    Publié le 11 mars 2011 par Julien

    Parce qu’il est bon de le rappeler quelque fois, un forum est à votre disposition sur Android-France.fr. Notre équipe composée de moi-même, Mrassol le social-traître passé sous Blackberry et le fidèle Biana est toujours là pour répondre à vos problèmes et essayez de vous apporter de nouvelles solutions.

    forum 800x758 Android France   Le forum (bis) Android France

    Vous y trouverez également un glossaire, des tutoriaux, des “qui c’est qui a la plus belle interface”, des tests d’applications réalisés par Beasty, bref que du bon.

    En attendant de lui donner un petit coup de lifting et si je vous en parle aujourd’hui, c’est que j’ai ajouté une dizaine de catégories manquantes : vous pourrez désormais discuter des tablettes du futur, des nouveaux LG ou encore de la gamme HTC 2011. De fait, certains forums seront communs : Galaxy S et Galaxy S II, Desire et Desire S etc. Du coup, pensez bien à préciser dans votre sujet quel est votre smartphone, un tag [Galaxy S] fera l’affaire, par exemple.

    Au plaisir de vous y retrouver !

    Comments (5)

  • Tags: , , , , , ,

    TutoMobile.fr – Un site prometteur de tutoriels Android

    Publié le 29 juillet 2010 par Yannick

    logo tuto mobile TutoMobile.fr   Un site prometteur de tutoriels Android Android France

    TutoMobile.fr, voilà un site sur lequel il est intéressant d’y passer quelques heures lorsque l’on est développeur d’application pour mobile.

    Je ne vous l’apprends pas, si vous êtes un développeur vous êtes à la recherche permanente de nouvelles ressources et si vous débutez c’est principalement des tutoriels qui vous donneront un peu d’expérience.

    Pour l’instant le site TutoMobile.fr n’est que très peu fourni en tutoriel Android (une douzaine à l’heure où j’écris cet article) mais la qualité et la motivation de l’auteur (Axon) en font une excellente ressource.

    Le site s’ouvre sur un éventail de développeur mobile puisqu’il regorge aussi de tutoriels concernant l’iPhone, WebApps et Windows mobile.

    Les tuto sont très bien détaillés, du bout de code JAVA (et “commenté“, une aubaine pour comprendre le code) en passant par des screenshots du résultat, le développeur n’aura guère de difficulté à suivre les explications.

    Retrouvez toute la liste des tutoriels pour Android sur tutomobile.fr.

    Comments (13)

  • Tags: , , , ,

    Tuto – Faite parler votre Android Phone dans vos applications

    Publié le 18 juin 2010 par Guy

    Maintenant que nous avons passé la barre de 50% d’Android Phone 2.1 sous Android, je pense que je peux commencer à faire des tutos avec le SDK 2.1.

    Dans ce Tuto je vais faire parler mon Android Phone avec une liste aléatoire de phrases et de mots grâce à la synthèse vocale.

    Je crée mon fichier de ma fenêtre avec juste un bouton pour lancer mon action

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <Button android:id="@+id/again_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:enabled="false"
            android:text="teste" />
    </LinearLayout>
    

    Dans ma classe j’implémente l’objet TextToSpeech, qui permet de lancer la synthèse vocale

    
    public class CommandeVocal extends Activity implements TextToSpeech.OnInitListener {
    private static final String TAG = "TextToSpeechDemo";
    //creation de objet TextToSpeech
    private TextToSpeech mTts;
    
    private Button mAgainButton;
    
    /** Called when the activity is first created. */
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
    
    super.onCreate(savedInstanceState);
    
    setContentView(R.layout.layout_xml);
    //instanciation de l'objet  mTts
    mTts = new TextToSpeech(this,this );
    
    // The button is disabled in the layout.
    
    // It will be enabled upon initialization of the TTS engine.
    
    mAgainButton = (Button) findViewById(R.id.again_button);
    
    mAgainButton.setOnClickListener(new View.OnClickListener() {
    
    public void onClick(View v) {
    
    ParleandroidPhone ();
    
    }
    
    });
    
    }
    

    Je crée mon tableau  de phrases aléatoire

    private static final Random RANDOM = new Random();
    
    private static final String[] HELLOS = {
    
    "Bonjour",
    
    "Comment tu vas",
    
    "Perpignan ",
    
    "J'aime Android France"
    
    };
    

    Une méthode importante dans notre classe c’est la méthode onInit qui permet de configurer la langue de notre synthèse vocale.

    // Implements TextToSpeech.OnInitListener.
    
    public void onInit(int status) {
    
    // vérification de la disponibilité  de la synthèse vocale.
    
    if (status == TextToSpeech.SUCCESS) {
    
    //le choix de la langue ici français
    
    int result = mTts.setLanguage(Locale.FRANCE);
    
    // vérification ici si cette langue est supporté par le terminal et si elle existe
    
    if (result == TextToSpeech.LANG_MISSING_DATA ||
    
    result == TextToSpeech.LANG_NOT_SUPPORTED) {
    
    //renvoi une erreur sur la console logcat.
    
    Log.e(TAG, "Language is not available.");
    
    } else {
    
    mAgainButton.setEnabled(true);
    
    ParleandroidPhone ();
    
    }
    
    } else {
    
    // si la synthèse vocal n'est pas disponible
    
    Log.e(TAG, "Could not initialize TextToSpeech.");
    
    }
    

    Puis ma Methode ParleandroidPhone qui lance aléatoirement une phrase

    
    private void ParleandroidPhone () {
    
    // choix aléatoire de la phrase.
    
    int helloLength = HELLOS.length;
    
    String hello = HELLOS[RANDOM.nextInt(helloLength)];
    
    mTts.speak(hello, TextToSpeech.QUEUE_FLUSH,  null);
    
    }
    

    Code complet du test ici, j’ai également ouvert un topic sur notre forum pour vos questions ou commentaires ici

    Tester avec le SDK 2.1

    Comments (3)

  • Tags: , , , , , , , , , ,

    Faites d’Opera Mini 5 votre navigateur par défaut avec OperaBridge

    Publié le 26 avril 2010 par Driss HAMADAINE

    Plus concurrentiel que sur les machines de bureau, le secteur des navigateurs internet mobiles propose un vaste panel d’applications. Ainsi chacun y trouve son compte. Seulement, lorsque l’utilisateur a trouvé chaussure à son pied, il est gênant de ne pas pouvoir définir son navigateur fétiche comme navigateur web par défaut.

    4554556688 3e513e02d2 Faites dOpera Mini 5 votre navigateur par défaut avec OperaBridge Android France

    Ce problème, les utilisateur qui ont adopté Opera Mini 5 le connaissent sans doute bien. Heureusement pour eux , une application existe désormais pour définir Opera Mini comme le navigateur Android par défaut.

    Répondant au nom d’OperaBridge, l’application se charge d’ouvrir les accès nécessaires pour qu’Opera Mini 5 soit le choix par défaut du système, lors de l’ouverture d’URL. Ainsi lorsque vous trouverez un hyperlien dans une application tierce, c’est Opera Mini qui sera sollicité pour afficher le contenu de la page internet.

    Seule ombre au tableau, contrairement au navigateur natif d’Android, un écran de chargement d’Opera est inévitable.

    Pour les personnes désireuses d’effectuer la manipulation, voici la procédure :

    1. Télécharger Opera Mini 5
    2. Télécharger OperaBridge sur l’Android Market
    3. Ouvrir une URL sur le téléphone, une notification apparaît « Complete action using »
    4. Sélectionner « Use by default for this action»
    5. Cliquer sur OperaBridge
    6. Le surf sans contraintes via Opera Mini 5 est désormais possible.

    Télécharger OperaBridge sur l’Android Market :

    4554543212 cf6c2c854d o Faites dOpera Mini 5 votre navigateur par défaut avec OperaBridge Android France

    via androinica.com

    Comments (71)

  • Tags: , , , , , ,

    Archos 5 IT – Passer en mode Ad Hoc

    Publié le 30 mars 2010 par Yannick

     Archos 5 IT   Passer en mode Ad Hoc Android France

    Un lecteur du forum archoslounge.net a trouvé une solution pour autoriser les connexions Ad Hoc sur la tablette Android Archos 5 IT depuis la mise à jour du firmware 1.7.71.

    En d’autres termes, cela signifie que si vous avez un smartphone Android avec le mode Root vous pouvez partager votre connexion 3G en wifi grâce aux applications de Tethering, maintenant avec cette solution la tablette Archos 5 IT pourra détecter les Ad Hoc WiFi disponible.

    Voici le tutoriel de la procédure à suivre pour basculer en mode Ad Hoc.

    1) Mettre l’archos en ADB

    2) adb pull /data/misc/wifi/wpa_supplicant.conf wpa_supplicant.conf
    une fois le fichier recuperé sur votre poste, l’editer, rajouter les lignes suivantes
    ap_scan=2

    network={
    ssid=» SSID DE MON RESEAU»
    scan_ssid=1
    key_mgmt=NONE
    priority=1
    disable_pm=1
    mode=1
    }
    3) adb push wpa_supplicant.conf /data/misc/wifi/wpa_supplicant.conf

    4) adb pull /data/misc/wifi/tiwlan.ini tiwlan.ini

    Chercher la ligne WiFiAdhoc = 0 et la remplacer par WiFiAdhoc = 1
    5) adb push tiwlan.ini /data/misc/wifi/tiwlan.ini

    Rebooter l’archos, relancer le wifi sur l’archos, l’archos voit le routeur adhoc.

    via jbmm.fr

    Comments (11)

  • Tags: , , , ,

    Développez des diagrammes de barres statistiques dans vos applications Android

    Publié le 02 mars 2010 par Guy

    Souvent dans nos applications le meilleur moyen de refléter des données, c’est de les présenter sous forme de Graphique statistique. Pour réaliser ces graphiques sous Android il y a deux possibilités, soit vous passez des journées à le développer vous même, soit vous intégrez une bibliothèque, qui permet de le réaliser en peu de temps. J’ai choisi la deuxième solution, je vais donc utiliser pour réaliser mon premier graphique statistique la Librairie du site java4less.

    D’abord, il faut importer cette librairie dans votre projet Android, pour cela sur votre projet vous devez faire clique droit->Propriété->Java build path->Librairie->Add external jars

    chart1 Développez des diagrammes de barres statistiques dans vos applications Android Android France

    .

    Je vais dans mon projet, créer une représentation de deux séries de valeur dans un Diagramme de Barre. Le résultat que je veux obtenir est celui-ci:

    chart2 Développez des diagrammes de barres statistiques dans vos applications Android Android France

    .

    D’abord j’intégre les différentes classes dans votre projet.

    import com.java4less.rchart.Chart;
    import com.java4less.rchart.ChartLoader;
    import com.java4less.rchart.android.ChartPanel;
    

    Je crée un objet cha de type ChartLoader et un autre objet de type ChartPanel.

    public class GraphAndroid extends Activity {
    /** Called when the activity is first created. */
    	ChartLoader cha;
    	ChartPanel chartPanel;
    }
    

    Dans ma méthode onCreate(Bundle icicle) j’instancie mon objet cha, puis je lui affecte des paramètres avec sa methode setParameter.

    cha=new ChartLoader();
              //Titre du diagramme
            cha.setParameter("TITLECHART","Graph Android France");
            //police du diagramme
    		cha.setParameter("TITLE_FONT","Serif|BOLD|12");
    		cha.setParameter("LEGEND","NO");
    		cha.setParameter("XSCALE_MIN","0");
    		cha.setParameter("XSCALE_MAX","5.5");
    		cha.setParameter("YSCALE_MIN","-15");
    		cha.setParameter("BIG_TICK_INTERVALX","1");
    		cha.setParameter("BIG_TICK_INTERVALY","1");
    		cha.setParameter("TICK_INTERVALY","10");
    		cha.setParameter("XAXIS_LABELS","June| |Aug.| |Oct.| |Dec.");
    		cha.setParameter("CERO_XAXIS","LINE");
    		cha.setParameter("YAXIS_INTEGER","TRUE");
    		cha.setParameter("SERIE_1","Products");
    		cha.setParameter("SERIE_2","Services");
    		cha.setParameter("SERIE_TYPE_1","BAR");
    		cha.setParameter("SERIE_TYPE_2","BAR");
    		cha.setParameter("SERIE_FONT_1","Arial|PLAIN|7");
    		cha.setParameter("SERIE_FONT_2","Arial|BOLD|7");
    		cha.setParameter("BOTTOM_MARGIN","0.18");
    		cha.setParameter("LEFT_MARGIN","0.1");
    		cha.setParameter("RIGHT_MARGIN","0.1");
    		cha.setParameter("LEGEND_MARGIN","0");
                     //serie de donnée pour le diagramme 1
    		cha.setParameter("SERIE_DATA_1","12|43|50|45|30");
                     //serie de donnée pour le diagramme 2
    		cha.setParameter("SERIE_DATA_2","-10|41|48|39|36");
    		cha.setParameter("SERIE_BORDER_TYPE_1","RAISED");
    		cha.setParameter("SERIE_BORDER_TYPE_2","RAISED");
                     //couleur pour le diagramme 1
    		cha.setParameter("SERIE_BAR_STYLE_1","0xff00");
                    //couleur pour le diagramme 2
    		cha.setParameter("SERIE_BAR_STYLE_2","0xff");
    		cha.setParameter("BARCHART_BARSPACE","1");
    		cha.setParameter("CHART_FILL","0xffcc00");
    		cha.setParameter("SERIE_NEGATIVE_STYLE_2","RED");
    		cha.setParameter("YLABEL_VERTICAL","TRUE");
    		cha.setParameter("BARCHART_BARSPACE","5");
    		cha.setParameter("SERIE_FORMAT_1","0");
    

    Les noms des paramètres son assez explicite. Ceux qui sont vraiment intéressants sont  SERIE_DATA_1 et SERIE_DATA_2 dans lesquels je passe mes valeurs séparées par un ” | “, et  SERIE_BAR_STYLE_1 et SERIE_BAR_STYLE_2 dans  lesquels je donne la valeur de la couleur de mes diagrammes.

    Pour l’affichage de mon diagramme je crée l’objet previewcha de type Chart, qui est instancie par la méthode build de mon objet  cha. Avec les methode je donne la dimension de mon image.

                Chart previewcha =cha.build(false,false);
    		previewcha .setWidth(300);
    		previewcha .setHeight(300);
    

    Pour afficher mon diagramme, j’utilise l’objet  ChartPanel que je passe dans la méthode setContentView(chartPanel);

    chartPanel = new ChartPanel(this);
    	    chartPanel.setChart(c);
            setContentView(chartPanel);
    

    Code source complet

    package org.com.graphandroid;
    
    import com.java4less.rchart.Chart;
    import com.java4less.rchart.ChartLoader;
    import com.java4less.rchart.android.ChartPanel;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class GraphAndroid extends Activity {
        /** Called when the activity is first created. */
    	ChartLoader cha;
    	ChartPanel chartPanel;
        @Override
        public void onCreate(Bundle icicle) {
    
            cha=new ChartLoader();
            cha.setParameter("TITLECHART","Graph Android France");
    		cha.setParameter("TITLE_FONT","Serif|BOLD|12");
    		cha.setParameter("LEGEND","NO");
    		cha.setParameter("XSCALE_MIN","0");
    		cha.setParameter("XSCALE_MAX","5.5");
    		cha.setParameter("YSCALE_MIN","-15");
    		cha.setParameter("BIG_TICK_INTERVALX","1");
    		cha.setParameter("BIG_TICK_INTERVALY","1");
    		cha.setParameter("TICK_INTERVALY","10");
    		cha.setParameter("XAXIS_LABELS","June| |Aug.| |Oct.| |Dec.");
    		cha.setParameter("CERO_XAXIS","LINE");
    		cha.setParameter("YAXIS_INTEGER","TRUE");
    		cha.setParameter("SERIE_1","Products");
    		cha.setParameter("SERIE_2","Services");
    		cha.setParameter("SERIE_TYPE_1","BAR");
    		cha.setParameter("SERIE_TYPE_2","BAR");
    		cha.setParameter("SERIE_FONT_1","Arial|PLAIN|7");
    		cha.setParameter("SERIE_FONT_2","Arial|BOLD|7");
    		cha.setParameter("BOTTOM_MARGIN","0.18");
    		cha.setParameter("LEFT_MARGIN","0.1");
    		cha.setParameter("RIGHT_MARGIN","0.1");
    		cha.setParameter("LEGEND_MARGIN","0");
    		cha.setParameter("SERIE_DATA_2","-10|41|48|39|36");
    		cha.setParameter("SERIE_BORDER_TYPE_1","RAISED");
    		cha.setParameter("SERIE_BORDER_TYPE_2","RAISED");
    		cha.setParameter("SERIE_BAR_STYLE_1","0xff00");
    		cha.setParameter("SERIE_BAR_STYLE_2","0xff");
    		cha.setParameter("BARCHART_BARSPACE","1");
    		cha.setParameter("CHART_FILL","0xffcc00");
    		cha.setParameter("SERIE_NEGATIVE_STYLE_2","RED");
    		cha.setParameter("YLABEL_VERTICAL","TRUE");
    		cha.setParameter("SERIE_DATA_1","12|43|50|45|30");
    		cha.setParameter("BARCHART_BARSPACE","5");
    		cha.setParameter("SERIE_FORMAT_1","0");	
    
    		Chart previewcha =cha.build(false,false);
    		previewcha.setWidth(300);
    		previewcha.setHeight(300);
            // this is to be able to load the images
    	    super.onCreate(icicle);
    	    chartPanel = new ChartPanel(this);
    	    chartPanel.setChart(previewcha );
            setContentView(chartPanel);
        }
    }
    

    La licence de cette librairie coute 35 euros

    Vous disposez avec cette librairie de plusieurs autre vues statisitiques

    Comments (1)

  • Tags: , , ,

    De nouveaux exemples de code et de ressources pour les développeurs android

    Publié le 18 décembre 2009 par Guy

    Si vous êtes développeur d’application android, vous devez connaitre le site developer.android.com. Pour ceux qui ne le connaissent pas encore c’est le site qui donne toutes les informations sur le développement des applications Android.

     De nouveaux exemples de code et de ressources pour les développeurs android Android France

    Bonne nouvelle pour les développeurs de nouveau exemples de code d’application sont en ligne:

    • Un exemple simple montre comment utiliser les configurations  multi écrans  d’Android dans le SDK.
    • Un exemples d’applications qui illustrent la façon de créer un widget interactif .
    • Un exemple sur l’utilisation  et manipulation les différents comptes d’un utilisateur et les fournisseurs de contact.
    • Bluetooth chat: une démo pour créer une application de chat par Bluetooth. Il montre comment découvrir les périphériques, initier une connexion, et transférer des données.
    • QuickContactsDemo: une démo montrant comment utiliser la classe android.widget.QuickContactsBadge dans Android 2.0.
    • SetWallpaper: une démo montrant comment utiliser la classe android.app.WallpaperManager nouvelles pour permettre aux utilisateurs de changer le papier peint du système.
    • Text-To-Speech: un échantillon au moyen Text-To-Speech (synthèse vocale) pour faire parler votre application.
    • NotePad (maintenant avec Live Folders): Cet exemple inclut maintenant le code pour créer des dossiers en dynamique.

    Pour mes prochains tuto je sais où je vais trouver l’inspiration. Via le site android-developers.blogspot.com

    Comments (3)

  • 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 (14)

  • Tags: , , , ,

    Développer la fonction shake (secouer) dans vos applications Android

    Publié le 16 novembre 2009 par Guy

    Je vais dans ce tuto développer une classe listener(ecouteur).Cette classe permettra de détecter quand le téléphone est secoué(shake). Cette Fonctionnalité permet par exemple une mise à jour d’informations de vos applications juste en secouant le téléphone.

    A vrai dire ce tuto sera juste un commentaire de texte. J’avais commencé à réfléchir comment implémenter cette fonctionnalité, et en cherchant sur le web je suis tombé sur l’excellent tuto de  android.hlidskialf.com. Je vais donc juste expliquer la démarche qu’il a choisi.

    Je crée une classe du type SensorListener .Cette classe vas détecter un shake de mon téléphone. La méthode qui m’intéresse dans cette classe est onSensorChanged. Cette méthode va détecter le déplacement du téléphone. Je vais la réécrire pour détecter un shake (secouement).
    D’abord mes diiférentes variables

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    public class CheckSecouer implements SensorEventListener {
            //vitesse minimun pour détecter un shake
    	private static final int FORCE_THRESHOLD = 350;
            //temps minimun pour commencer a détecter la position du téléphone
            private static final int TIME_THRESHOLD = 100;
            //temps minimun entre 2 position pour être considérer comme un shaker
            private static final int SHAKE_TIMEOUT = 500;
    	//temps entre  un 2 shake pour incrementer le nombre de shake
            private static final int SHAKE_DURATION = 1000;	
           // nombre de shake pour lancer une action 
           private static final int SHAKE_COUNT = 3;

    Maintenant j’implémente ma fonction onSensorChanged qui détectera un shake (secouement)

    ?Download download.txt
    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
    
    public void onSensorChanged(SensorEvent event) {
    		if (sensor != SensorManager.SENSOR_ACCELEROMETER) return;
    	           //le temps de debut  
                       long now = System.currentTimeMillis();
     
                // si ce temps et le temps de la dernière position est trop long, supérieur à SHAKE_TIMEOUT on recommence avec mShakeCount = 0;
    	    if ((now - mLastForce) > SHAKE_TIMEOUT) {
    	     mShakeCount = 0;
    	   }
     
    	    if ((now - mLastTime) > TIME_THRESHOLD) {
          long diff = now - mLastTime;
    	  // calcule de la vitesse de shake    
           float speed = Math.abs(values[SensorManager.DATA_X] + values[SensorManager.DATA_Y] + values[SensorManager.DATA_Z] - mLastX - mLastY - mLastZ) / diff * 10000;
    	// on passe cette étape si notre vitesse est supérieure à notre vitesse minimum  FORCE_THRESHOLD 
            if (speed > FORCE_THRESHOLD) {
    	       // si nous avons un nombre de shake supérieur à notre nombre minimun   SHAKE_COUNT 
                   if ((++mShakeCount >= SHAKE_COUNT) && (now - mLastShake > SHAKE_DURATION)) {
    	          mLastShake = now;
    	          mShakeCount = 0;
    	          if (mShakeListener != null) {
    	              //  si toute les conditions sont réunies je lance ma fonction onshake dans laquelle j'ai l'action à exécuter
                           mShakeListener.onShake();
    	         }
    	        }
    	        mLastForce = now;
            }
    	      mLastTime = now;
           mLastX = values[SensorManager.DATA_X];
           mLastY = values[SensorManager.DATA_Y];
    	   mLastZ = values[SensorManager.DATA_Z];
    	    }
     
    	}

    Code source complet de la classe CheckSecouer

    ?Download download.txt
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    
    package org.com.secouertelephone;
     
    import android.content.Context;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorListener;
    import android.hardware.SensorManager;
     
    public class CheckSecouer 	implements SensorEventListener {
     
     
     
    	private static final int FORCE_THRESHOLD = 350;
        private static final int TIME_THRESHOLD = 100;
        private static final int SHAKE_TIMEOUT = 500;
    	private static final int SHAKE_DURATION = 1000;
    	private static final int SHAKE_COUNT = 3;
     
    	private SensorManager mSensorMgr;
    	private float mLastX=-1.0f, mLastY=-1.0f, mLastZ=-1.0f;
    	private long mLastTime;
    	private OnShakeListener mShakeListener;
    	private Context mContext;
    	private int mShakeCount = 0;
    	private long mLastShake;
    	private long mLastForce;
     
    	public CheckSecouer(Context context) {
    		mContext = context;
    		resume();
    		// TODO Auto-generated constructor stub
    	}
     
    	public void setOnShakeListener(OnShakeListener listener)
    	  {
    	    mShakeListener = listener;
    	  }
     
    	public void resume() {
    		 mSensorMgr = (SensorManager)mContext.getSystemService(Context.SENSOR_SERVICE);
    		 if (mSensorMgr == null) {
    		    throw new UnsupportedOperationException("Sensors not supported");
    		   }
    		    boolean supported = mSensorMgr.registerListener(this, SensorManager.SENSOR_ACCELEROMETER, SensorManager.SENSOR_DELAY_GAME);
    		    if (!supported) {
    		      mSensorMgr.unregisterListener(this, SensorManager.SENSOR_ACCELEROMETER);
    		      throw new UnsupportedOperationException("Accelerometer not supported");
    	       }
    	}
     
    	public void pause() {
    		  if (mSensorMgr != null) {
    		     mSensorMgr.unregisterListener(this, SensorManager.SENSOR_ACCELEROMETER);
    		      mSensorMgr = null;
    		    }
    	  }
     
     
    	public void onAccuracyChanged(Sensor sensor, int accuracy) {
    		// TODO Auto-generated method stub
     
    	}
     
    	public void onSensorChanged(SensorEvent event) {
    		if (sensor != SensorManager.SENSOR_ACCELEROMETER) return;
    	    long now = System.currentTimeMillis();
     
    	    if ((now - mLastForce) > SHAKE_TIMEOUT) {
    	     mShakeCount = 0;
    	   }
     
    	    if ((now - mLastTime) > TIME_THRESHOLD) {
          long diff = now - mLastTime;
    	      float speed = Math.abs(values[SensorManager.DATA_X] + values[SensorManager.DATA_Y] + values[SensorManager.DATA_Z] - mLastX - mLastY - mLastZ) / diff * 10000;
    	      if (speed > FORCE_THRESHOLD) {
    	        if ((++mShakeCount >= SHAKE_COUNT) && (now - mLastShake > SHAKE_DURATION)) {
    	          mLastShake = now;
    	          mShakeCount = 0;
    	          if (mShakeListener != null) {
    	              mShakeListener.onShake();
    	         }
    	        }
    	        mLastForce = now;
            }
    	      mLastTime = now;
           mLastX = values[SensorManager.DATA_X];
           mLastY = values[SensorManager.DATA_Y];
    	   mLastZ = values[SensorManager.DATA_Z];
    	    }
     
    	}
    }

    Exemple d’utilisation de cette classe

    ?Download download.txt
    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
    
       public class Testy extends Activity{
          // creer nom listener  pour détecter des shakes
          private CheckSecouer mShaker;  
          @Override
           public void onCreate(Bundle savedInstanceState){
                     super.onCreate(savedInstanceState);
                     setContentView(R.layout.main);
                     //objet vibrator por faire une cation de vibration
                    final Vibrator vibe = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
                    //mon listener  pour dététer un shake
                    mShaker = new ShakeListener(this);
                  mShaker.setOnShakeListener(new ShakeListener.OnShakeListener () {
                             public void onShake()
                             {
                                //quand il y a détection je fais vibrer mon téléphone et j"ouvre un boite de dialogue 
                                 vibe.vibrate(100);
                                 new AlertDialog.Builder(Testy.this)
                                .setPositiveButton(android.R.string.ok, null)
                                .setMessage("Secouer!")
                                .show();
                             }
     
                 }    );           
           }
     
     
        @Override
      public void onResume()
      {
        mShaker.resume();
       super.onResume();
      }
      @Override
      public void onPause()
      {
        mShaker.pause();
        super.onPause();
      }    
       }

    Comments (10)

  • Tags: , , , , , ,

    Passer votre HTC Magic sous Android 1.6 donut !

    Publié le 09 octobre 2009 par Yannick

    tuto android france 03 Passer votre HTC Magic sous Android 1.6 donut ! Android France

    On peut voir fleurir sur les forums pas mal de versions de ROM maison créé par des fans d’Android.

    tuto android france 01 Passer votre HTC Magic sous Android 1.6 donut ! Android France

    Récemment un utilisateur nommé Luo nous a concocté pour le HTC Magic une ROM (luo_AOSP_Donut_0.3.4) qui inclut Donut 1.6.

    Pour rappel Donut vous apportera ces principales modifications :

    • support VPN natif
    • fonction rechercher très performante qui recherche à la fois dans les contacts, dans la musique, l’historique du navigateur, les favoris ou encore les applications.
    • fonction Text to Speech
    • l’appareil photo et la caméra ont fusionnés
    • amélioration des performances

    tuto android france 021 Passer votre HTC Magic sous Android 1.6 donut ! Android France

    Pour ceux qui ne sont pas très expérimentés pour installer une nouvelle ROM sur leur terminal Android, voilà un tutoriel, qui vous explique pas à pas la démarche à suivre.

    Voir le tutoriel complet sur monandroid.fr

    Comments (14)

  • Tags: , , , , , , , , , ,

    Guide – Bien démarrer avec son Archos 5 Internet Tablet

    Publié le 06 octobre 2009 par Cyril

    3985395990 84f10ee5aa b Guide   Bien démarrer avec son Archos 5 Internet Tablet Android France

    Nous proposons ce guide de démarrage du Archos 5 Internet Tablet pour améliorer l’expérience Android sur une Tablette tactile à tous les primo arrivant, quelque soit leur niveau, vous n’aurez qu’à suivre les différentes étapes de cette check-list pour avoir un MID (Mobile Internet Device) exploitable sans trop passer de temps à chercher les informations vous-même.

    Ce guide sera le premier billet de notre nouvelle section Tablette qui comme vous l’aurez compris assurera le suivi de l’actualité des tablettes tactiles sous Android.

    Une fois votre MID complétement chargée (en une seule fois) vous allez pouvoir commencer à suivre les étapes suivantes.

    1. Création de votre compte chez Archos et enregistrement de votre tablette :

    Cette étape va vous permettre d’accéder à tous les services de Archos (Webradio, youtube…), il vous suffit de vous rendre sur le site d’Archos à cette adresse et de remplir le formulaire.

    Une fois identifié rendez-vous sur la page ajouter un produit et saisissez les informations demandées. Votre Tablette apparaitra dans votre interface personnelle sur le site d’Archos dans la rubrique Gestion de vos produits. Comme vous aurez saisi le numéro de série de votre tablette, elle sera activée dès sa première connexion à internet.

    2. Mise à jour du firmware :

    Rendez vous sur la page de téléchargement du site Archos et choisissez votre modèle, récupérez sur votre ordinateur le fichier .aos et copier le ensuite à la racine du disque de votre MID. Une fois déconnectée de votre ordinateur la tablette va détecter que vous avez déposé une mise à jour de son firmware et vous proposera de l’installer. Le reste de la procédure est totalement automatique.

    Cette étape peut être effectuée en ligne directement de la tablette mais nous préférons la faire dès le début et via votre ordinateur.

    3. Connexion internet et activation de la tablette:

    Vous allez maintenant devoir paramétrer votre MID pour qu’il se connecte sur internet, soit en le jumelant avec votre smartphone si vous avez un forfait data soit avec votre routeur wifi si vous avez l’adsl (soit avec l’accès gratuit du Mc do si vous n’avez aucun des 2).

    Une fois connecté lancez le lecteur multimédia et lancez le client Webradio, comme vous avez enregistré votre tablet avec son numéro de série le terminal va s’activer tout seul.

    4. installation des application ARchos et d’Appslibs (si elles ne sons pas présentes au premier démarrage):

    Vous n’aurez pas d’Android Market (c’est le store Google et non Archos) sur votre MID, d’ailleurs vous n’aurez aucun market d’applications si vous achetez les premiers modèles, le logiciel client du store logiciel d’Archos étant mis à disposition après la commercialisation des premières séries de tablette il vous faudra l’installer vous-même.

    Téléchargez le fichier sur ce lien depuis votre ordinateur (le navigateur de la tablette ne reconnait pas les fichiers apk) et copiez-le dans le disque de votre tablette. Lancez votre gestionnaire de fichiers (au nom très original de “Fichiers”) et double tapez sur le .apk. Une fois l’installation terminée votre MID aura enfin son store.

    Archos a mis à disposition sur son site officiel un fichier permettant de remettre le pack complet de ses applications en une seule fois, il vous suffira de télécharger le fichier ici et de le déposer à la racine de la mémoire internet de votre tablette, vous pourrez ensuite lancer l’installation en double tapant sur le fichier depuis l’explorateur de fichier.

    Il vous faudra ensuite aller dans les paramètres, à propos de l’appareil, outils de réparation et formatage puis de choisir assistant de démarrage. L’assistant va être lancé au prochain redémarrage (pas de panique aucunes données ne va être éffacée) et ce oup-ci vous aurez bien vos applications.

    Voila vous êtes maintenant opérationnel et vous allez pouvoir commencer à créer votre environnement en installant les applications qui compléteront le système Android, vous pouvez récupérer tout un tas de logiciels sur le market d’Archos mais vous pouvez aussi installer n’importe quelle application en .apk en la lançant depuis le gestionnaire de fichier, cependant seules les applications proposées sur Appslib ont un affichage optimisé pour votre tablette et il ce peut donc que les autre logiciels soit mal adaptés (à vous de tester).

    Comments (7)

  • Tags: ,

    Utiliser la bar de notification dans vos applications android

    Publié le 26 septembre 2009 par Guy

    Dans ce tuto je vais mettre une alerte dans ma bar de modification quand je clique sur mon bouton
    D’abord Mon fichier xml de mon interface.

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="Application alerte notification"
        />
        <Button  
         android:id="@+id/btn_showsample"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Montrer une alert." />
    </LinearLayout>

    Je crée deux objets de type NotificationManager(objet gérant les notifications) et Notification(objet de la notification)

    ?Download download.txt
    1
    2
    
     private NotificationManager mNotificationManager;
     Notification notification;

    Ensuite j’instancie ces objets et avec la méthode setOnClickListener de mon bouton je lance une notification.

    ?Download download.txt
    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
    
      super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            //icone qui s'affichera dans la bar de notification
            int icon = R.drawable.icon;
           //texte dans la bar de notification
            CharSequence tickerText = "Notification android-france";
            long when = System.currentTimeMillis();
     
            notification = new Notification(icon, tickerText, when);
     
            Context context = getApplicationContext();
            CharSequence contentTitle = "Notification Android-france";
            CharSequence contentText = "Tuto Bar de notification";
            Intent notificationIntent = new Intent(this, Appnotif.class);
            PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
            notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
     
            mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     
            Button btsauvegarde = (Button) findViewById(R.id.btn_showsample);
            btsauvegarde.setOnClickListener(new Button.OnClickListener() {
                public void onClick(View v) {
                	mNotificationManager.notify(1,notification);
                }
            });

    Résutat
    notif1 196x300 Utiliser la bar de notification dans vos applications android Android France notif3 202x300 Utiliser la bar de notification dans vos applications android Android Francenotif2 205x300 Utiliser la bar de notification dans vos applications android Android France

    Comments (1)

  • Tags: , , , , , , ,

    Formation vidéo – Comment devenir un développeur Android ?

    Publié le 31 août 2009 par Yannick

     Formation vidéo   Comment devenir un développeur Android ? Android France

    Personne ne naît développeur (excepté Guy icon wink Formation vidéo   Comment devenir un développeur Android ? Android France ), le développement s’apprend, et pour palier ce manque notre ami Nicolas Sorel (android.codes-sources.com et fr.androlib.com) et son acolyte Emmanuel Robles, nous ont préparé une excellente formation vidéo d’environ 8h d’apprentissage sur le développement Android, le tout décortiqué en plusieurs chapitres pour que cette formation s’adresse autant au développeur débutant qu’au développeur expérimenté qui souhaite approfondir c’est connaissance.

    Du paramétrage de l’environnement de développement à la publication de votre application sur Android Market, tout y est détaillé et expliqué en vidéo.

    Grâce au site video2brain, nous vous proposons de pouvoir l’acheter sur notre boutique Android-France.

    Tout ce qu’il faut savoir pour commencer à programmer des applications pour Android, le système d’exploitation OpenSource pour terminaux mobiles. Non seulement vous apprendrez à installer et paramétrer l’environnement de développement avec son éditeur de code et son émulateur, mais en plus vous allez découvrir comment tirer profit du Framework pour créer vos propres applications et les publier sur le Market Place de Google !

    Cette formation vous en coutera 39,95 €, le prix me semble raisonnable en comparaison avec les bouquins de programmation qui sont en moyenne entre 30€ et 50€, de plus on peu le voir comme un investissement amortissable par la suite, par la possible vente de vos applications sur  l’Android Market.

    Après avoir visionné les 8h de vidéo de cette formation et consulté les tutoriels de Guy, plus aucun développement d’application ne vous impressionnera.

    Des extraits vidéo gratuits sont disponibles sur la boutique Android-France.

    Comments (10)

  • Tags: , ,

    Utiliser l’accéléromètre d’android dans ses applications

    Publié le 23 août 2009 par Guy

    Dans ce tuto je vais utiliser l’accéléromètre, pour afficher la position de mon portable dans l’espace. les coordonnées X,Y,Z.

    D’abord mon fichier xml pour afficher le resultat

    ?Download download.txt
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="Affiche les coordonnées X,Y,Z"
        />
        <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:stretchColumns="1">
         <TableRow>
         <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="coord X"
        />
          <EditText  
    	android:id="@+id/textX"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="Ingredient"
        android:background="#D4D0C8"
        android:textColor="#000000"
        />
        </TableRow>
        <TableRow>
        <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="      "
        />
        </TableRow>
         <TableRow>
         <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="coord Y"
        />
          <EditText  
    	android:id="@+id/textY"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="Ingredient"
        android:background="#D4D0C8"
        android:textColor="#000000"
        />
        </TableRow>
        <TableRow>
        <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="      "
        />
        </TableRow>
         <TableRow>
         <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="coord Z"
        />
          <EditText  
    	android:id="@+id/textZ"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="Ingredient"
        android:background="#D4D0C8"
        android:textColor="#000000"
        />
        </TableRow>
     
        </TableLayout>
    </LinearLayout>

    acelometre 200x300 Utiliser laccéléromètre dandroid dans ses applications Android France

    Pour utiliser les capteurs d’android  j’utilise la class SensorManager.

    Dans ma methode onCreate je crée mon objet SensorManager

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            // mon objet mSensorManager de type  SensorManager qui prend la main
            mSensorManager = (SensorManager)getSystemService(this.SENSOR_SERVICE); 
          //Sensor. TYPE_ACCELEROMETER défini le type de capteur
         //SensorManager.SENSOR_DELAY_NORMAL le delai  de rafraichissement des informations
            mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
            SensorManager.SENSOR_DELAY_NORMAL); 
            //les objet de la fenetre xml
            mTxtViewX = (TextView) findViewById(R.id.textX);
            mTxtViewY = (TextView) findViewById(R.id.textY);
            mTxtViewZ = (TextView) findViewById(R.id.textZ);
     
        }

    je crée une méthode positon qui met à jour les champs TextView de mon Xml.

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    
     public void Position(float iX, float iY, float iZ) 
        { 
        	mTxtViewZ.setText(" "+iZ); 
        	mTxtViewX.setText(" "+iX); 
        	mTxtViewY.setText(" "+iY); 
        }

    Je crée maintenant mon objet SensorEventListener , qui sera l’écouteur des évènements de mon capteur.

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    private final SensorEventListener mSensorListener = new SensorEventListener() { 
            // action quand le capteur bouge
            public void onSensorChanged(SensorEvent se) 
            { 
                float x = se.values[0]; 
                float y = se.values[1]; 
                float z = se.values[2]; 
                // met à jour la position dans mes TextView
                Position(x, y , z); 
            } 
     
            public void onAccuracyChanged(Sensor sensor, int accuracy) {} 
       };

    Le code complet.

    ?Download download.txt
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    
    package org.accelometre;
     
    import android.app.Activity;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.os.Bundle;
    import android.widget.TextView;
     
    public class Accelerometre extends Activity {
    	private SensorManager mSensorManager;
    	private TextView mTxtViewX;
    	private TextView mTxtViewY;
    	private TextView mTxtViewZ;
    	/** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            mSensorManager = (SensorManager)getSystemService(this.SENSOR_SERVICE); 
            mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
            SensorManager.SENSOR_DELAY_NORMAL); 
            //mTxtView = new TextView(this);
            mTxtViewX = (TextView) findViewById(R.id.textX);
            mTxtViewY = (TextView) findViewById(R.id.textY);
            mTxtViewZ = (TextView) findViewById(R.id.textZ);
     
        }
     
        public void Position(float iX, float iY, float iZ) 
        { 
        	mTxtViewZ.setText(" "+iZ); 
        	mTxtViewX.setText(" "+iX); 
        	mTxtViewY.setText(" "+iY); 
        }
     
        private final SensorEventListener mSensorListener = new SensorEventListener() { 
     
            public void onSensorChanged(SensorEvent se) 
            { 
                float x = se.values[0]; 
                float y = se.values[1]; 
                float z = se.values[2]; 
                Position(x, y , z); 
            } 
     
            public void onAccuracyChanged(Sensor sensor, int accuracy) {} 
       }; 
     
       @Override 
       protected void onResume() 
       { 
            super.onResume(); 
            mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 
       } 
     
       @Override 
       protected void onStop() 
       { 
            mSensorManager.unregisterListener(mSensorListener); 
            super.onStop(); 
       } 
     
     
     
     //**********fin de la class*************************   
    }

    Pour tester cette class vous devez disposer d’un téléphone, je ne crois que ça fonctionnera sur l’émulateur.

    Il est temps de mettre à profit les tutoriels d’Android France:
    Passez à la vitesse supérieure et investissez quelques dizaines d’euros pour acquérir les connaissances qui vous feront gagner de l’argent avec vos applications rendez-vous sur notre boutique Android-france pour ces formations en vidéo

    Comments (7)

  • Tags: , , , ,

    Développez une application pour android étape 21 (Modifier un ingrédient avec une boite de dialogue)

    Publié le 04 août 2009 par Guy

    Dans L’étape précédente “Développez une application pour android étape 20 (Appui long sous android pour supprimer des ingrédients)” , sur un appui long j’ouvrais une boite de dialogue pour confirmer la suppression de l’ingrédient sélectionné.
    Dans cette étape, je vais utiliser le click simple pour modifier l’ingrédient sélectionné. J’ouvre une boite de dialogue personnalisée avec les champs déjà remplis.

    etape211 191x300 Développez une application pour android étape 21 (Modifier un ingrédient avec une boite de dialogue) Android France etape2123 198x300 Développez une application pour android étape 21 (Modifier un ingrédient avec une boite de dialogue) Android France etape213 198x300 Développez une application pour android étape 21 (Modifier un ingrédient avec une boite de dialogue) Android France

    D’abord le fichier xml de mon formulaire

    ?Download download.txt
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="fill_parent" 
                  android:layout_height="fill_parent" 
                  android:orientation="vertical" >
     
     <TextView android:id="@+id/unitme"
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:text="unite de mesure"  />  
      <EditText android:id="@+id/valunite" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:background="@android:drawable/editbox_background" />
     
      <TextView android:id="@+id/unitme"
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:text="quantite"  />  
      <EditText android:id="@+id/valquante" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:background="@android:drawable/editbox_background"   
    	android:textSize="18sp"/>
     
      <TextView android:id="@+id/ingredient"
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:text="Ingredient"  />  
     
      <EditText android:id="@+id/valingredient" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:background="@android:drawable/editbox_background" /> 
      <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:stretchColumns="2">
     
        <TableRow>
     
       <Button android:id="@+id/btvalingre"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Valider" />  
     
         <Button android:id="@+id/btquitter"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="quitter" />  
          </TableRow>
           </TableLayout>                              
     
    </LinearLayout>

    Je crée ma classe Myclassdialogmodif.java (une nouvelle boite de saisie).

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    public class Myclassdialogmodif extends Dialog  implements OnClickListener{
    	private Button  okButton;
    	private Button   cancelButton;
    	private Context  lecontext;
          private ReadyListener readyListener;
          private String lunite="";//unité
          private String laquantite="";//quantité
          private String lingredient="";// nom de l'ingredient
          private int lapositon=0;//attribut pour la position de l'ingredient dans ma liste
     
         public interface ReadyListener { 
             public void ready(String sUnite,String sQuantite,String sIngredient,int position); 
        }

    Dans mon constructeur, je passe les valeurs à renseigner dans les champs

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    public Myclassdialogmodif(Context context, ReadyListener readyListener,
    			String unite,String squantite,String ingredient,int position) {
    		super(context);
    		lecontext = context;
    		this.readyListener = readyListener;
    		this.lunite=unite;//l'unité de mesure
    		this.laquantite=squantite;// la quantité
    		this.lingredient=ingredient;//nom de l'ingredient
    		this.lapositon=position;//la postion dans la listview
     
    	}

    Au lancement de ma fenêtre de saisie, je renseigne les champs.

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    @Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		  Log.d("TestApp", "Dialog created");
    			setContentView(R.layout.choixingredient);			
    			okButton = (Button) findViewById(R.id.btvalingre);
    			cancelButton = (Button) findViewById(R.id.btquitter);			
    			okButton.setOnClickListener(this);
    			cancelButton.setOnClickListener(this);	
    			//récupération de mes différent champs de mon xml
                            TextView textmesure = (TextView) findViewById(R.id.valunite);
    			TextView textquantite = (TextView) findViewById(R.id.valquante);
    			TextView textingredient = (TextView) findViewById(R.id.valingredient);
    			//renseignement de mes champs dans la boite de saisie
                            textmesure.setText(lunite);
    			textquantite.setText(laquantite);
    			textingredient.setText(lingredient);
    	}

    La suite du ma classe et la même que celle de l’étape 15 “Développez une application pour android étape 15 (Rajouter une listview dans mon formulaire pour afficher les ingrédients)“.
    Tout le code.

    ?Download download.txt
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    
    import android.app.Dialog;
    import android.content.Context;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
     
    public class Myclassdialogmodif extends Dialog  implements OnClickListener{
     
    	private Button  okButton;
     
    	private Button   cancelButton;
    	private Context  lecontext;
        private ReadyListener readyListener;
        private String lunite="";
        private String laquantite="";
        private String lingredient="";
        private int lapositon=0;
     
     
    	 public interface ReadyListener { 
             public void ready(String sUnite,String sQuantite,String sIngredient,int position); 
        } 
     
    	public Myclassdialogmodif(Context context, ReadyListener readyListener,
    			String unite,String squantite,String ingredient,int position) {
    		super(context);
    		lecontext = context;
    		this.readyListener = readyListener;
    		this.lunite=unite;
    		this.laquantite=squantite;
    		this.lingredient=ingredient;
    		this.lapositon=position;
     
    	}
     
    	/**
    	* @see android.app.Dialog#onCreate(android.os.Bundle)
    	*/
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		  Log.d("TestApp", "Dialog created");
    			setContentView(R.layout.choixingredient);			
    			okButton = (Button) findViewById(R.id.btvalingre);
    			cancelButton = (Button) findViewById(R.id.btquitter);			
    			okButton.setOnClickListener(this);
    			cancelButton.setOnClickListener(this);	
    			TextView textmesure = (TextView) findViewById(R.id.valunite);
    			TextView textquantite = (TextView) findViewById(R.id.valquante);
    			TextView textingredient = (TextView) findViewById(R.id.valingredient);
    			textmesure.setText(lunite);
    			textquantite.setText(laquantite);
    			textingredient.setText(lingredient);
    	}
     
    	public void onClick(View view) {
    		switch (view.getId()) {
    			case R.id.btquitter:
    				dismiss();
    			break;
    			case R.id.btvalingre:
    				try{			
    					TextView textmesure = (TextView) findViewById(R.id.valunite);
    					TextView textquantite = (TextView) findViewById(R.id.valquante);
    					TextView textingredient = (TextView) findViewById(R.id.valingredient);
     
     
     
    					String sRetour =textquantite.getText()+","+textmesure.getText()+","+textingredient.getText();
     
    					String sUnite = textmesure.getText()+"";
    					String sQuantite = textquantite.getText()+"";
    					String sIngredient = textingredient.getText()+"";
     
    					//appelle de la methode readyListener.ready et on passe en valeur le formatage
    					readyListener.ready(sUnite,sQuantite,sIngredient,lapositon);
    					//String u="kk";
    				}catch(Exception e){
    					TextView textbastmp2 = (TextView) findViewById(R.id.ingredient);
    					textbastmp2.setText(e.toString());
    				}
    			 break;
    			}
    		}
     
    }

    Dans ma class EnregRecette.java, je rajoute la méthode onItemClick pour le click simple.

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
        public void onItemClick(AdapterView parent, View v, int position, long id) {
        	//***********suppression des informations dans mon tableau********
        	//création de mon objet  en passant les valeurs des champs à renseigner ainsi qui la position dans ma liste    	
        	Myclassdialogmodif dialog = new Myclassdialogmodif(v.getContext(),
         			new OnReadyListenerModif(),aTableauIngredient.get(position)[0],
         			aTableauIngredient.get(position)[1],aTableauIngredient.get(position)[2]
         			,position);
         	dialog.setTitle("Modifier l'ingredient");
         	dialog.show();
     
        }

    Je rajoute également la class OnReadyListenerModif implements Myclassdialogmodif.ReadyListener.
    Implementant la méthode ready.

    ?Download download.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
     private class OnReadyListenerModif implements Myclassdialogmodif.ReadyListener
        { 
     
     
            public void ready(String sUnite,String sQuantite,String sIngredient,int position) { 
     
            	String[] sNewtext=new String[]{sUnite,sQuantite,sIngredient};
     
            	String sNewtextaff="";
            	// modification de la position dans notre tableau d'ingrédient
            	aTableauIngredient.set(position, sNewtext);
            	 //modification de l'aaffichage dans notre listwiex
            	aTableauIngredientaff.set(position,sQuantite+" "+sUnite+" "+sIngredient);       
            	//rafraichissement de ma listview
                  mRecetteList = (ListView) findViewById(android.R.id.list);          	  
            	final ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(getBaseContext(),
           	            android.R.layout.simple_list_item_1,aTableauIngredientaff);
            	mRecetteList.setAdapter(adapter2);
     
     
            }
         }

    tout le code de ma class EnregRecette.java

    ?Download download.txt
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    
    public class EnregRecette extends Activity implements AdapterView.OnItemClickListener, View.OnClickListener{
     
     
    	 private ListView mRecetteList;
    	 private  Context lecontext;
    	 private final ArrayList<String[]> aTableauIngredient= new ArrayList<String[]>();
    	 private final ArrayList<String> aTableauIngredientaff= new ArrayList<String>();
    	 private  BDAcces objBd=new BDAcces(this);
    	 private int ilaposition=0;
    	/** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
             lecontext =this;
             this.setContentView(R.layout.main);
         	  Button btEnregRecette = (Button) findViewById(R.id.button);
     
         	   Button btEnregajcon = (Button) findViewById(R.id.ajcondiment);
     
         	 final TextView texthaut = (TextView) findViewById(R.id.entry);
         	 final TextView textbas = (TextView) findViewById(R.id.entry3);
     
         	 mRecetteList = (ListView) findViewById(android.R.id.list);          	  
          	final ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(getBaseContext(),
         	            android.R.layout.simple_list_item_1,aTableauIngredientaff);
          	mRecetteList.setAdapter(adapter2);
         	 //final TextView textmilieu = (TextView) findViewById(R.id.entry2);
          	mRecetteList.setOnItemClickListener(this);
          	mRecetteList.setOnItemLongClickListener(new OnItemLongClickListener() {
     
             public boolean onItemLongClick(AdapterView parent, View v, int position, long id) {
                 	ilaposition=position;
                 	new AlertDialog.Builder(EnregRecette.this)
                     .setTitle("Confirmation")
                     .setMessage("Voulez vous supprimer cet ingredient de la liste")
                     .setPositiveButton("OUI", new DialogInterface.OnClickListener()
                     {
                          public void onClick(DialogInterface dialog, int whichButton)
                          {
                         	 aTableauIngredientaff.remove(ilaposition);
                          	aTableauIngredient.remove(ilaposition);
                          	mRecetteList = (ListView) findViewById(android.R.id.list);          	  
                          	final ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(getBaseContext(),
                         	            android.R.layout.simple_list_item_1,aTableauIngredientaff);
                          	mRecetteList.setAdapter(adapter2);
                          }
                     })
                     .setNegativeButton("NON", new DialogInterface.OnClickListener() {
                     public void onClick(DialogInterface dialog, int whichButton) {
     
                         /* User clicked Cancel so do some stuff */
     
                     }
                 })
                     .show(); 
     
                     return true;   
                 }
     
         	});
     
     
     
          	//this.setContentView(R.layout.liste_recette);
     
         	btEnregRecette.setOnClickListener(new Button.OnClickListener() {
                 public void onClick(View v) {
                 	try{
                 	//textbas.setText(texthaut.getText());
                 	String sNomRecette = texthaut.getText().toString(); 
                 	String sContenuRecette = textbas.getText().toString();
                 	objBd.open();
                 	//texthaut.setText(objBd.renvoi_requete());
                 	long bresult = objBd.insertRecette(sNomRecette, sContenuRecette,aTableauIngredient);
                 	String resultsring = new Long(bresult).toString() ;
                 	textbas.setText(resultsring);
                 	//textmilieu.setText(sContenuRecette);
                 	objBd.close();
                 	}
                 	catch (Exception e) {
                 		textbas.setText("erreur "+e.getMessage());
    	               }
     
                 }
         	});
     
         	btEnregajcon.setOnClickListener(new Button.OnClickListener() {
                 public void onClick(View v) {
                 	//View v v.getContext()
                 	Myclassdialog dialog = new Myclassdialog(v.getContext(),
                 			new OnReadyListener());
                 	dialog.setTitle("Enregistrement ingredient");
                 	dialog.show();
     
                 }
         	});        	
     
     
        }
     
        private class OnReadyListener implements Myclassdialog.ReadyListener
        { 
     
     
            public void ready(String sUnite,String sQuantite,String sIngredient) { 
     
            	String[] sNewtext=new String[]{sUnite,sQuantite,sIngredient};
     
            	String sNewtextaff="";
     
            	aTableauIngredient.add(sNewtext);
     
            	aTableauIngredientaff.add(sQuantite+" "+sUnite+" "+sIngredient);
     
     
            	mRecetteList = (ListView) findViewById(android.R.id.list);          	  
            	final ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(getBaseContext(),
           	            android.R.layout.simple_list_item_1,aTableauIngredientaff);
            	mRecetteList.setAdapter(adapter2);
     
     
            	//textbastmp2.setText(sNewtextaff);
     
            }
         } 
     
     
        private class OnReadyListenerModif implements Myclassdialogmodif.ReadyListener
        { 
     
     
            public void ready(String sUnite,String sQuantite,String sIngredient,int position) { 
     
            	String[] sNewtext=new String[]{sUnite,sQuantite,sIngredient};
     
            	String sNewtextaff="";
     
     
            	aTableauIngredient.set(position, sNewtext);
            	aTableauIngredientaff.set(position,sQuantite+" "+sUnite+" "+sIngredient);
     
            	mRecetteList = (ListView) findViewById(android.R.id.list);          	  
            	final ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(getBaseContext(),
           	            android.R.layout.simple_list_item_1,aTableauIngredientaff);
            	mRecetteList.setAdapter(adapter2);
     
     
            }
         } 
     
     // action sur le clik sur un item de ma listview
        public void onItemClick(AdapterView parent, View v, int position, long id) {
     
        	Myclassdialogmodif dialog = new Myclassdialogmodif(v.getContext(),
         			new OnReadyListenerModif(),aTableauIngredient.get(position)[0],
         			aTableauIngredient.get(position)[1],aTableauIngredient.get(position)[2]
         			,position);
         	dialog.setTitle("Modifier l'ingredient");
         	dialog.show();
     
        }
        public void onClick(View v) {
        	int u=0;
        }
     
     
    }

    Code source de l’application ici.

    Il est temps de mettre à profit les tutoriels d’Android France:
    Passez à la vitesse supérieure et investissez quelques dizaines d’euros pour acquérir les connaissances qui vous feront gagner de l’argent avec vos applications rendez-vous sur notre boutique Android-france pour ces formations en vidéo

    Comments (6)

  • Les Brèves