<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le Blog du grand loup Zeur &#187; android</title>
	<atom:link href="http://blog.gaetan-grigis.eu/tag/android/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gaetan-grigis.eu</link>
	<description>Le blog qui vous fait connaitre ce que vous savez déjà</description>
	<lastBuildDate>Tue, 17 Jan 2012 08:43:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>[Android] application de contrôle à distance/backup/info</title>
		<link>http://blog.gaetan-grigis.eu/android/android-application-de-controle-a-distancebackupinfo/</link>
		<comments>http://blog.gaetan-grigis.eu/android/android-application-de-controle-a-distancebackupinfo/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 17:23:41 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[...]]></category>
		<category><![CDATA[perte]]></category>
		<category><![CDATA[récupération]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[vol]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=1120</guid>
		<description><![CDATA[plop à tous &#8230; Encore une appli inutile que je ne vais probablement pas terminer ^^, mais qui m&#8217;a permis d&#8217;apprendre pas mal de trucs sur android et gwt (notamment le fameux C2DM). Le but de l&#8217;appli est très simple, on a oublié où l&#8217;on a mis son téléphone ? on se l&#8217;est fait voler [...]]]></description>
			<content:encoded><![CDATA[<p>plop à tous &#8230;</p>
<p>Encore une appli inutile que je ne vais probablement pas terminer ^^, mais qui m&#8217;a permis d&#8217;apprendre pas mal de trucs sur android et gwt (notamment le fameux <a href="http://blog.gaetan-grigis.eu/systeme/android-c2dm-notification-push-en-bash-avec-wget/">C2DM</a>).</p>
<p>Le but de l&#8217;appli est très simple, on a oublié où l&#8217;on a mis son téléphone ? on se l&#8217;est fait voler ?<br />
Grâce aux notifications C2DM, on peux envoyer des messages au téléphone pour obtenir sa position, le faire sonner, &#8230; sans avoir de tâche de fond dédiée qui bouffe de la batterie ou qui aurait pu se faire killer par le système de gestion de mémoire.</p>
<p><strong>[Aparté sur la sécurité]</strong> Le petit bémol du C2DM, c&#8217;est que si votre téléphone n&#8217;est pas verrouillé (code, schéma, &#8230;) et qu&#8217;une personne supprime l&#8217;application ou supprime vos comptes google, l&#8217;application ne fonctionnera plus &#8230; et ne permettra plus d&#8217;être tracé donc ^^. (d&#8217;un autre côté, c&#8217;est aussi le cas de la plupart des applications &#8230;)</p>
<p><span id="more-1120"></span></p>
<p>Pour le moment seule l&#8217;architecture de base est en place :</p>
<ul>
<li>Côté site web (<a href="https://github.com/cipher16/RCBackUpAndWipeWeb">github</a>) :
<ul>
<li>Authentification</li>
<li>Envoi de notifications</li>
<li>Stockage des données</li>
<li>Affichage des informations (à perfectionner)</li>
<li>A faire : Utilisation d&#8217;un fwk d&#8217;event pour afficher l&#8217;info directement à sa reception</li>
<li>A faire : Gestion des messages d&#8217;erreur</li>
<li>A faire : Info sur l&#8217;utilisations</li>
<li>A faire : Ergo/Charte graphique</li>
</ul>
</li>
<li>Côté application android (<a href="https://github.com/cipher16/RCBackUpAndWipe">github</a>) :
<ul>
<li>Authentification</li>
<li>Réception des notification</li>
<li>Envoi des données (GPS (perfectible &#8230;), Statut)</li>
<li>Exécution d&#8217;action (sonnerie seulement pour le moment)</li>
<li>A faire : Ergo/Info/Licence/Contrat, &#8230;</li>
</ul>
</li>
</ul>
<p>Un screen du site :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/08/rcbu.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/08/rcbu.png" alt="" title="rcbu" width="758" height="466" class="aligncenter size-full wp-image-1122" /></a></p>
<p>L&#8217;application (dispo <a href="https://github.com/cipher16/RCBackUpAndWipe/raw/master/bin/RCBackupAndWipe.apk">ici</a>)</p>
<p><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/08/rcbu-android.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/08/rcbu-android.png" alt="" title="rcbu-android" width="324" height="458" class="aligncenter size-full wp-image-1124" /></a></p>
<p>Pour <del datetime="2011-08-14T16:47:15+00:00">l&#8217;utiliser</del> la tester et la synchroniser, il faut sélectionner le &laquo;&nbsp;Mail Account&nbsp;&raquo; avec lequel on veut s&#8217;authentifier sur le site : <a href="https://rcbuandroid.appspot.com">rcbuweb</a> puis sélectionner les infos que l&#8217;on veut (l&#8217;info peut mettre plusieurs secondes avant d&#8217;être récupérée).</p>
<p>Au premier clic on envoi la notif, au deuxieme on l&#8217;affiche (faut que je trouve un système de push gwt client/serveur pour faire ça proprement).</p>
<p>L&#8217;appli est en développement pour le moment, mais ça fonctionne déjà pas trop mal (à part le mode GPS satellite (autant rester en network) &#8230; car une fois activé, il ne s&#8217;éteint plus et bouffe de la batterie pour rien ;s).</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=1120">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/programmation/java/application-android-pour-les-horaires-de-trambus-grenoblois-tagsemitag/" rel="bookmark" title="Permanent Link: Application android pour les horaires de tram/bus grenoblois (Tag/SemiTag)">Application android pour les horaires de tram/bus grenoblois (Tag/SemiTag)</a></li><li><a href="http://blog.gaetan-grigis.eu/android/application-android-pour-le-telechargement-des-versions-de-cyanogen/" rel="bookmark" title="Permanent Link: Application android pour le téléchargement des versions de Cyanogen">Application android pour le téléchargement des versions de Cyanogen</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/mon-application-android-pour-les-horaires-de-la-cts/" rel="bookmark" title="Permanent Link: Mon Application Android pour les horaires de la CTS">Mon Application Android pour les horaires de la CTS</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/android-c2dm-notification-push-en-bash-avec-wget/" rel="bookmark" title="Permanent Link: Android C2DM Notification push en bash avec wget">Android C2DM Notification push en bash avec wget</a></li><li><a href="http://blog.gaetan-grigis.eu/non-classe/un-peu-davancement-dans-lapplication-android-de-la-cts/" rel="bookmark" title="Permanent Link: Un peu d&#8217;avancement dans l&#8217;application Android de la CTS &#8230;">Un peu d&#8217;avancement dans l&#8217;application Android de la CTS &#8230;</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/android/android-application-de-controle-a-distancebackupinfo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Android C2DM Notification push en bash avec wget</title>
		<link>http://blog.gaetan-grigis.eu/systeme/android-c2dm-notification-push-en-bash-avec-wget/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/android-c2dm-notification-push-en-bash-avec-wget/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 18:00:10 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[authentification]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[c2dm]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=1116</guid>
		<description><![CDATA[plop à tous &#8230; encore un article &#171;&#160;borderline&#160;&#187; et completement useless &#8230; Cette fois pour tester les notifications C2DM (cloud to device messaging), l&#8217;équivalent Android des push iphone en un peu plus complexe nécessité d&#8217;avoir un compte google devant s&#8217;authentifier pour ensuite envoyer un message par device_id (le device id pouvant expirer, tout comme l&#8217;authentification), [...]]]></description>
			<content:encoded><![CDATA[<p>plop à tous &#8230; encore un article &laquo;&nbsp;borderline&nbsp;&raquo; et completement useless &#8230;</p>
<p>Cette fois pour tester les notifications C2DM (<a href="http://code.google.com/intl/fr/android/c2dm/">cloud to device messaging</a>), l&#8217;équivalent Android des push iphone en un peu plus complexe nécessité d&#8217;avoir un compte google devant s&#8217;authentifier pour ensuite envoyer un message par device_id (le device id pouvant expirer, tout comme l&#8217;authentification), pour les push iphone il suffisait d&#8217;avoir les tokens et basta ^^).</p>
<p>Mais au final le système répond plutôt rapidement, cela dit, en suivant de nombreux tuto sur le developement d&#8217;application utilisant C2DM (ici un premier <a href="http://www.vogella.de/articles/AndroidCloudToDeviceMessaging/article.html">tuto complet</a> et ici un second tuto <a href="http://blog.octo.com/notifications-push-android-c2dm/">assez complet et intéressant</a>).</p>
<p>Le problème c&#8217;est que pour tester le C2DM, la méthode nécessitant une authentification, et l&#8217;utilisation d&#8217;un header spé, pour tester l&#8217;envoi de notifications, certains recommendent de créer une seconde appli android pour envoyer les push, ou bien encore d&#8217;utiliser curl pour les requêtes, un outil qui n&#8217;est jamais installé de base sur une machine (la plupart des sytèmes unix intégrant wget, pourquoi utiliser curl?).</p>
<p>Donc pour le fun, voici ma version wgeté (j&#8217;ai découvert l&#8217;usage des headers sur wget) :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="co0">#!/bin/bash</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$#</span> <span class="sy0">!</span>= <span class="nu0">3</span> <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Usage : $0 &#39;mail&#39; &#39;reg_id&#39; &#39;message&#39;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">email=</span><span class="st0">&quot;$1&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">registration_id=</span><span class="st0">&quot;$2&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">message=</span><span class="st0">&quot;$3&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">post_data=</span><span class="st0">&quot;registration_id=$registration_id&amp;data.message=$message&amp;collapse_key=0&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="sy0">!</span> -f <span class="sy0">/</span>tmp<span class="sy0">/</span>ClientLogin <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">read</span> -p <span class="st0">&quot;Password : &quot;</span> -e password</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">wget</span> <span class="st0">&quot;https://www.google.com/accounts/ClientLogin&quot;</span> &#8211;post-<span class="re2">data=</span><span class="st0">&quot;Email=$email&amp;Passwd=$password&amp;accountType=GOOGLE&amp;service=ac2dm&quot;</span> -qO- <span class="sy0">&gt;</span> <span class="sy0">/</span>tmp<span class="sy0">/</span>ClientLogin</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">auth=</span>`<span class="kw2">cat</span> <span class="sy0">/</span>tmp<span class="sy0">/</span>ClientLogin<span class="sy0">|</span>grep <span class="st0">&quot;Auth&quot;</span><span class="sy0">|</span>awk <span class="st0">&#39;{split($0,array,&quot;Auth=&quot;); print array[2]}&#39;</span>`</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">wget</span> <span class="st0">&quot;https://android.apis.google.com/c2dm/send&quot;</span> &#8211;<span class="re2">header=</span><span class="st0">&quot;Authorization: GoogleLogin auth=$auth&quot;</span> &#8211;post-<span class="re2">data=</span><span class="st0">&quot;$post_data&quot;</span> &#8211;no-check-certificate -qO-</div>
</li>
</ol>
</div>
<p>Si le script ne renvoit rien, c&#8217;est bon, si il répond par un Error=UnMessageDerreur, c&#8217;est pas bon, bon dev <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=1116">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/android/android-application-de-controle-a-distancebackupinfo/" rel="bookmark" title="Permanent Link: [Android] application de contrôle à distance/backup/info">[Android] application de contrôle à distance/backup/info</a></li><li><a href="http://blog.gaetan-grigis.eu/mes-applicationsscripts/" rel="bookmark" title="Permanent Link: Mes Applications/Scripts">Mes Applications/Scripts</a></li><li><a href="http://blog.gaetan-grigis.eu/android/application-android-pour-le-telechargement-des-versions-de-cyanogen/" rel="bookmark" title="Permanent Link: Application android pour le téléchargement des versions de Cyanogen">Application android pour le téléchargement des versions de Cyanogen</a></li><li><a href="http://blog.gaetan-grigis.eu/android/compiler-cyanogen-android-froyo-sur-ubuntu/" rel="bookmark" title="Permanent Link: Compiler Cyanogen (android froyo) sur Ubuntu">Compiler Cyanogen (android froyo) sur Ubuntu</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/gresillement-du-driver-em28xx-et-kernel-2-6-28-sur-ubuntu-9-04/" rel="bookmark" title="Permanent Link: Grésillement du driver em28xx et kernel 2.6.28 sur ubuntu 9.04">Grésillement du driver em28xx et kernel 2.6.28 sur ubuntu 9.04</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/android-c2dm-notification-push-en-bash-avec-wget/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Application android pour le téléchargement des versions de Cyanogen</title>
		<link>http://blog.gaetan-grigis.eu/android/application-android-pour-le-telechargement-des-versions-de-cyanogen/</link>
		<comments>http://blog.gaetan-grigis.eu/android/application-android-pour-le-telechargement-des-versions-de-cyanogen/#comments</comments>
		<pubDate>Sat, 28 May 2011 16:42:30 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[cyanogen]]></category>
		<category><![CDATA[downloader]]></category>
		<category><![CDATA[nightly]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=1084</guid>
		<description><![CDATA[Plop à tous &#8230; Suite au passage de mon Galaxy S sur Cyanogen, j&#8217;ai remarqué qu&#8217;il fallait avoir une licence premium sur le Rom manager pour choper les nightly automatiquement &#8230; radin comme je suis, je ne pouvais pas payer juste pour une fonctionnalité aisément programmable par mes soins ^^ Gripsou Powaaa!! Histoire d&#8217;en apprendre [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à tous &#8230;</p>
<p>Suite au passage de mon Galaxy S sur Cyanogen, j&#8217;ai remarqué qu&#8217;il fallait avoir une licence premium sur le Rom manager pour choper les <a href="http://download.cyanogenmod.com/">nightly</a> automatiquement &#8230; radin comme je suis, je ne pouvais pas payer juste pour une fonctionnalité aisément programmable par mes soins ^^ Gripsou Powaaa!!</p>
<p><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/05/cyanogenDownloader-1.png" alt="" title="cyanogenDownloader-1" width="325" height="487" class="aligncenter size-full wp-image-1085" /><br />
<span id="more-1084"></span></p>
<p>Histoire d&#8217;en apprendre un peu plus sur la programmation d&#8217;applications android, j&#8217;ai décidé de mettre le &laquo;&nbsp;paquet&nbsp;&raquo; (c&#8217;est relatif bien sûr) sur les fonctionnalités et cette application comporte donc les possibilités suivantes :</p>
<ul>
<li>Menu contextuel</li>
<li>Edition de preference</li>
<li>Notification &laquo;&nbsp;En cours&nbsp;&raquo;</li>
<li>Notification &laquo;&nbsp;Normale&nbsp;&raquo;</li>
<li>Thread</li>
</ul>
<p>L&#8217;édition des préférences<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/05/cyanogenDownloader-2.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/05/cyanogenDownloader-2.png" alt="" title="cyanogenDownloader-2" width="327" height="490" class="aligncenter size-full wp-image-1086" /></a></p>
<p>Le choix du type de mise à jour (ici pour un Galaxy S)<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/05/CyanogenDownloader-3.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/05/CyanogenDownloader-3.png" alt="" title="CyanogenDownloader-3" width="300" height="240" class="aligncenter size-full wp-image-1087" /></a></p>
<p>La superbe notification (j&#8217;en suis fière &#8230; il m&#8217;a fallut 2 threads pour le faire ^^)<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/05/CyanogenDownloader-4.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/05/CyanogenDownloader-4.png" alt="" title="CyanogenDownloader-4" width="313" height="167" class="aligncenter size-full wp-image-1088" /></a></p>
<p>Le système de notification de mise à jour est en &laquo;&nbsp;étude&nbsp;&raquo;, les options existent pour le lancer, mais il ne fait rien <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Le code source du soft est dispo sur <a href="https://github.com/cipher16/AndroidCyanogenModDownloader/">GitHub</a> et l&#8217;application peut être téléchargée <a href="https://github.com/cipher16/AndroidCyanogenModDownloader/raw/master/bin/CyanogenModDownloader.apk">ici</a> (faire enregistrer sous en le nommant en .apk).</p>
<p>Histoire de poster un peu de code, il est possible de télécharger rapidement des fichiers sur android via le code suivant : </p>
<div class="geshi no java">
<ol>
<li class="li1">
<div class="de1"><span class="kw3">File</span> fo = <span class="kw2">new</span> <span class="kw3">File</span><span class="br0">&#40;</span>getFilesDir<span class="br0">&#40;</span><span class="br0">&#41;</span>,urlD.<span class="me1">substring</span><span class="br0">&#40;</span>urlD.<span class="me1">lastIndexOf</span><span class="br0">&#40;</span><span class="st0">&quot;/&quot;</span><span class="br0">&#41;</span><span class="nu0">+1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">HttpEntity he = <span class="kw2">new</span> DefaultHttpClient<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">execute</span><span class="br0">&#40;</span><span class="kw2">new</span> HttpGet<span class="br0">&#40;</span>urlD<span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">getEntity</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">he.<span class="me1">writeTo</span><span class="br0">&#40;</span><span class="kw2">new</span> <span class="kw3">FileOutputStream</span><span class="br0">&#40;</span>fo<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>En utilisant le getFilesDir, on utilise le répertoire de l&#8217;application, rendant possible la suppression des données téléchargées depuis le panel de gestion des applications android :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/05/CyanogenDownloader-5.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/05/CyanogenDownloader-5.png" alt="" title="CyanogenDownloader-5" width="325" height="295" class="aligncenter size-full wp-image-1091" /></a></p>
<p>Voilà &#8230; j’essaierais de poursuivre le développement de cette application histoire de toucher un panel assez grand de fonctionnalités de bases pour une application android.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=1084">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/android/compiler-cyanogen-android-froyo-sur-ubuntu/" rel="bookmark" title="Permanent Link: Compiler Cyanogen (android froyo) sur Ubuntu">Compiler Cyanogen (android froyo) sur Ubuntu</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/java/application-android-pour-les-horaires-de-trambus-grenoblois-tagsemitag/" rel="bookmark" title="Permanent Link: Application android pour les horaires de tram/bus grenoblois (Tag/SemiTag)">Application android pour les horaires de tram/bus grenoblois (Tag/SemiTag)</a></li><li><a href="http://blog.gaetan-grigis.eu/android/android-application-de-controle-a-distancebackupinfo/" rel="bookmark" title="Permanent Link: [Android] application de contrôle à distance/backup/info">[Android] application de contrôle à distance/backup/info</a></li><li><a href="http://blog.gaetan-grigis.eu/android/compiler-android-sur-ubuntu-9-10/" rel="bookmark" title="Permanent Link: Compiler android sur ubuntu 9.10">Compiler android sur ubuntu 9.10</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/installer-un-donuts-sur-son-g1-cyanogenmod/" rel="bookmark" title="Permanent Link: Installer un donuts sur son G1 (CyanogenMod)">Installer un donuts sur son G1 (CyanogenMod)</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/android/application-android-pour-le-telechargement-des-versions-de-cyanogen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Application android pour les horaires de tram/bus grenoblois (Tag/SemiTag)</title>
		<link>http://blog.gaetan-grigis.eu/programmation/java/application-android-pour-les-horaires-de-trambus-grenoblois-tagsemitag/</link>
		<comments>http://blog.gaetan-grigis.eu/programmation/java/application-android-pour-les-horaires-de-trambus-grenoblois-tagsemitag/#comments</comments>
		<pubDate>Sat, 21 May 2011 09:00:19 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[bus]]></category>
		<category><![CDATA[grenoble]]></category>
		<category><![CDATA[htmlcleaner]]></category>
		<category><![CDATA[parsing]]></category>
		<category><![CDATA[semitag]]></category>
		<category><![CDATA[tag]]></category>
		<category><![CDATA[tram]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=1081</guid>
		<description><![CDATA[Plop à tous &#8230; Alors voilà &#8230; hier j&#8217;avais cours de Java, et comme l&#8217;ennui c&#8217;est fait sentir, j&#8217;ai décidé de créer un &#171;&#160;clone&#160;&#187; de mon application pour les horaires des transports strasbourgeois en un peu plus propre (côté code), mais toujours aussi simpliste (faudrait voir pour utiliser des threads pour le système de recherche, [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à tous &#8230;</p>
<p>Alors voilà &#8230; hier j&#8217;avais cours de Java, et comme l&#8217;ennui c&#8217;est fait sentir, j&#8217;ai décidé de créer un &laquo;&nbsp;clone&nbsp;&raquo; de mon application pour les horaires des transports strasbourgeois en un peu plus propre (côté code), mais toujours aussi simpliste (faudrait voir pour utiliser des threads pour le système de recherche, une barre de chargement, une widget configurable, &#8230; mais en 8 heures j&#8217;ai pas eu le temps ^^).<br />
<span id="more-1081"></span><br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/05/android-tag.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/05/android-tag.png" alt="" title="android-tag" width="323" height="487" class="aligncenter size-full wp-image-1082" /></a></p>
<p>L&#8217;application se base sur les données fournit par le site : <a href="http://tag.mobitrans.fr/">tag.mobitrans.fr</a>, le site utilise des tokens et chaque recherche doit se faire en tapant dans 3 pages différentes, puis une page par ligne de tram/bus, donc potentiellement pas mal de parsing et de conso de bande passante).</p>
<p>Pour ne pas à avoir à utiliser de regexp, j&#8217;ai utilisé la librairie <a href="http://htmlcleaner.sourceforge.net/">htmlcleaner</a>, qui transforme de l&#8217;html en XML bien formé, permettant des requêtes xpath pour récupérer les éléments, réduisant de façon significative le temps de développement.</p>
<p>Un petit code d&#8217;exemple de l&#8217;utilisation d&#8217;Html cleaner : </p>
<div class="geshi no java">
<ol>
<li class="li1">
<div class="de1">HtmlCleaner hc = <span class="kw2">new</span> HtmlCleaner<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">TagNode tn = hc.<span class="me1">clean</span><span class="br0">&#40;</span><span class="st0">&quot;url du site&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//recuperation du contenu d&#39;une div ayant pour classe &#39;corpsL&#39;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw3">Object</span> o : tn.<span class="me1">evaluateXPath</span><span class="br0">&#40;</span><span class="st0">&quot;//div[@class=&#39;corpsL&#39;]//div&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//affichage du texte pour les elements de type a &nbsp; </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw3">System</span>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>TagNode<span class="br0">&#41;</span> o<span class="br0">&#41;</span>.<span class="me1">getElementsByName</span><span class="br0">&#40;</span><span class="st0">&quot;a&quot;</span>, <span class="kw2">false</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Le code <a href="https://github.com/cipher16/AndroidTagMobiTrans">source du projet</a> pour donner quelques idées et l&#8217;<a href="https://github.com/cipher16/AndroidTagMobiTrans/raw/master/bin/tag.apk">apk</a>.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=1081">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/non-classe/un-peu-davancement-dans-lapplication-android-de-la-cts/" rel="bookmark" title="Permanent Link: Un peu d&#8217;avancement dans l&#8217;application Android de la CTS &#8230;">Un peu d&#8217;avancement dans l&#8217;application Android de la CTS &#8230;</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/mon-application-android-pour-les-horaires-de-la-cts/" rel="bookmark" title="Permanent Link: Mon Application Android pour les horaires de la CTS">Mon Application Android pour les horaires de la CTS</a></li><li><a href="http://blog.gaetan-grigis.eu/android/application-android-pour-le-telechargement-des-versions-de-cyanogen/" rel="bookmark" title="Permanent Link: Application android pour le téléchargement des versions de Cyanogen">Application android pour le téléchargement des versions de Cyanogen</a></li><li><a href="http://blog.gaetan-grigis.eu/android/android-application-de-controle-a-distancebackupinfo/" rel="bookmark" title="Permanent Link: [Android] application de contrôle à distance/backup/info">[Android] application de contrôle à distance/backup/info</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/android-c2dm-notification-push-en-bash-avec-wget/" rel="bookmark" title="Permanent Link: Android C2DM Notification push en bash avec wget">Android C2DM Notification push en bash avec wget</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/programmation/java/application-android-pour-les-horaires-de-trambus-grenoblois-tagsemitag/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Wifi ou 3G tethering sur cyanogenmod via Bluetooth ou USB</title>
		<link>http://blog.gaetan-grigis.eu/ubuntu/wifi-ou-3g-tethering-sur-cyanogenmod-via-bluetooth-ou-usb/</link>
		<comments>http://blog.gaetan-grigis.eu/ubuntu/wifi-ou-3g-tethering-sur-cyanogenmod-via-bluetooth-ou-usb/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 07:29:14 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[3G]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[bluetooth]]></category>
		<category><![CDATA[cyanogenmod]]></category>
		<category><![CDATA[tethering]]></category>
		<category><![CDATA[usb]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=853</guid>
		<description><![CDATA[Plop à tous &#8230;. ATTENTION, le tethering (partage de la connexion n&#8217;est peut être pas autorisé par votre fournisseur d&#8217;accès &#8230;) Une petite astuce pour profiter du tethering du wifi ou de la 3G sur les dernières version du cyanogenmod 5.x, pour ce faire, il suffit d&#8217;aller sur le menu Paramètre, puis &#171;&#160;Sans fil et [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à tous &#8230;.</p>
<p><span style="color: #ff0000;">ATTENTION, le tethering (partage de la connexion n&#8217;est peut être pas autorisé par votre fournisseur d&#8217;accès &#8230;)</span><br />
<span id="more-853"></span><br />
Une petite astuce pour profiter du tethering du wifi ou de la 3G sur les dernières version du cyanogenmod 5.x, pour ce faire, il suffit d&#8217;aller sur le menu Paramètre, puis &laquo;&nbsp;Sans fil et réseaux&nbsp;&raquo;, puis &laquo;&nbsp;internet tethering&nbsp;&raquo; :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/07/tether.png"><img class="aligncenter size-full wp-image-856" title="tether" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/07/tether.png" alt="" width="320" height="480" /></a><br />
Maintenant vous avez deux possibilités :</p>
<h2>USB</h2>
<p>Partager la connexion par USB, rien de plus simple, une fois la connectique USB branchée, sur Ubuntu, NetworkManager détecte automatiquement le téléphone comme modem et se connecte dessus :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/07/Seelection_0131.png"><img class="aligncenter size-full wp-image-859" title="Sélection_013" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/07/Seelection_0131.png" alt="" width="351" height="147" /></a></p>
<p><span style="color: #ff0000;">Attention, tant que l&#8217;option &laquo;&nbsp;internet tethering&nbsp;&raquo; est actif, il vous sera impossible de transférer de fichiers sur votre téléphone depuis l&#8217;ordinateur et vice-versa.</span></p>
<h2>Bluetooth</h2>
<p>L&#8217;autre possibilité est de partager la connexion par Bluetooth &#8230; un peu plus compliqué, car ce n&#8217;est pas reconnu par défaut &#8230; Il vous faudra tout d&#8217;abord pairer votre téléphone via bluetooth (je vous laisse vous débrouillez pour ça).</p>
<p>Puis avec blueman (apt-get install blueman), clic droit puis &laquo;&nbsp;actualiser le service&nbsp;&raquo; (pour rafraichir la connexion), puis clic droit &laquo;&nbsp;&nbsp;&raquo;  : &laquo;&nbsp;Connect to : Point d&#8217;accès réseau&nbsp;&raquo; :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/07/Seelection_0111.png"><img class="aligncenter size-full wp-image-858" title="Sélection_011" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/07/Seelection_0111.png" alt="" width="802" height="456" /></a></p>
<p>Il vous faudra ensuite ouvrir une console et vérifier la connexion par un ifconfig, si la connexion à fonctionnée, une interface bnep0 est apparu, il vous suffit de faire un :</p>
<pre lang="bash">sudo dhclient bnep0</pre>
<p>et vous obtiendrez votre connexion à internet par bluetooth &#8230;</p>
<h2>Débit</h2>
<p>Niveau débit &#8230; il y a une net différence, en USB on peut monter à 500ko/s (en wifi bien sûr), ce qui donne un débit intéressant pour les jeux vidéos (fps et autre) avec un ping moyen de 80, en bluetooth, le débit monte à 80ko/s et j&#8217;ai pas osé de ping vu la lenteur de la connexion ^^.</p>
<h2>L&#8217;intérêt du système</h2>
<p>Profiter d&#8217;une connexion à internet en dehors de chez soi (pour la 3G), ou bien avoir une carte wifi d&#8217;appoint pour un fixe sans carte wifi.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=853">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/ubuntu/controller-sa-carte-wifi-atheros-sous-ubuntu-lucid/" rel="bookmark" title="Permanent Link: Controller sa carte wifi atheros sous ubuntu Lucid">Controller sa carte wifi atheros sous ubuntu Lucid</a></li><li><a href="http://blog.gaetan-grigis.eu/ubuntu/une-wii-hd-pour-moins-de-100e-avec-dolphin-sur-ubuntu/" rel="bookmark" title="Permanent Link: Une Wii HD pour moins de 100€ avec Dolphin sur Ubuntu">Une Wii HD pour moins de 100€ avec Dolphin sur Ubuntu</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/wifi-reduire-les-lags-sous-linux-network-manager/" rel="bookmark" title="Permanent Link: [wifi] Réduire les lags sous linux ( Network Manager )">[wifi] Réduire les lags sous linux ( Network Manager )</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/iodine-et-dns-tunneling/" rel="bookmark" title="Permanent Link: Iodine et DNS Tunneling">Iodine et DNS Tunneling</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/bt3-dans-les-bacs-les-hackeurs-vont-se-regaler/" rel="bookmark" title="Permanent Link: BT3 dans les bacs &#8230; les hackeurs vont se régaler">BT3 dans les bacs &#8230; les hackeurs vont se régaler</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/ubuntu/wifi-ou-3g-tethering-sur-cyanogenmod-via-bluetooth-ou-usb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Compiler android sur ubuntu 9.10</title>
		<link>http://blog.gaetan-grigis.eu/android/compiler-android-sur-ubuntu-9-10/</link>
		<comments>http://blog.gaetan-grigis.eu/android/compiler-android-sur-ubuntu-9-10/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 20:51:54 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[eclair]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=711</guid>
		<description><![CDATA[Bijour à tous &#8230; Après quelques semaines sans article, il me fallait du lourd pour affirmer ma virilité mon côté geek &#8230; j&#8217;ai donc décidé d&#8217;écrire un petit truc sur android parce que j&#8217;ai rien d&#8217;autre à foutre et que je voulais voir tourner mes proc à plein régime &#8230; Pour ce faire il vous [...]]]></description>
			<content:encoded><![CDATA[<p>Bijour à tous &#8230;<br />
Après quelques semaines sans article, il me fallait du lourd pour affirmer <del datetime="2010-03-04T20:53:16+00:00">ma virilité</del> mon côté geek &#8230; j&#8217;ai donc décidé d&#8217;écrire un petit truc sur android<del datetime="2010-03-04T20:53:16+00:00"> parce que j&#8217;ai rien d&#8217;autre à foutre</del> et que je voulais voir tourner mes proc à plein régime &#8230;<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/compilation-android.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/compilation-android.png" alt="" title="compilation-android" width="104" height="218" class="aligncenter size-full wp-image-729" /></a><br />
<span id="more-711"></span><br />
Pour ce faire il vous faudra :</p>
<ol>
<li>de la patience</li>
<li>de la patience</li>
<li>de la patience</li>
<li>de la patience</li>
<li>un ordi (facultatif si vous pouvez compiler de tête &#8230; pour ma part j&#8217;y arrive pas encore :s)</li>
<li>4Go de ram + un bon CPU</li>
<li>linux</li>
</ol>
<p>Il vous faudra aussi installer une machine java très ancienne (1.5) à <a href="https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-1.5.0_21-oth-JPR@CDS-CDS_Developer">télécharger ici</a>. Installez-là en mode utilisateur simple dans un dossier dédié à la compilation d&#8217;android, chez moi : ~/Android/.</p>
<p>Ensuite, le super script, les quelques variables au début du fichier sont à modifier, le reste est automatisé.<br />
Ce que fait le script :</p>
<ol>
<ul>Téléchargement du fichier repo</ul>
<ul>Récupération/Mise à jour du dépot d&#8217;android (très lourd, il faut 1 heures pour dl 2Giga de données)</ul>
<ul>Compilation des sources d&#8217;android (tout les binaires, &#8230; c&#8217;est très long)</ul>
<ul>et c&#8217;est tout!!</ul>
</ol>
<p>Faudra quand même attendre 3 ou 4 heures lors de la première compilation/récupération des fichiers&#8230; </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="co0">#!/bin/bash</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">JDK15=</span><span class="sy0">/</span>home<span class="sy0">/</span><span class="re1">$USER</span><span class="sy0">/</span>Documents<span class="sy0">/</span>Android<span class="sy0">/</span>jdk1<span class="nu0">.5</span>.0_21<span class="sy0">/</span>bin</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">BINDIR=</span><span class="sy0">/</span>home<span class="sy0">/</span><span class="re1">$USER</span><span class="sy0">/</span>Documents<span class="sy0">/</span>Android</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">MYDROID=</span><span class="sy0">/</span>home<span class="sy0">/</span><span class="re1">$USER</span><span class="sy0">/</span>Documents<span class="sy0">/</span>Android<span class="sy0">/</span>mydroid</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">TYPE_MACHINE=</span>`<span class="kw2">uname</span> -m`</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">PATH=</span><span class="re1">$JDK15</span>:<span class="re1">$PATH</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#Need 1.5 https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-1.5.0_21-oth-JPR@CDS-CDS_Developer</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">##############DON&#39;T TOUCH BELOW&#8230; OR SUFFER HUNDREDS PAINS &#8230; MUUAAHAHAHAHAHAHAHAHAAHAHHAAAA</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Lancement de SIACAKDLM&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Système d&#39;install automatisé de compilation d&#39;android pour kikoolol dépressif en 1337n355 mode&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Temps requis pour arriver à la fin de ce script après execution : 2h00&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Installation des fichiers requis &#8230;&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> apt-get -yqq <span class="kw2">install</span> git-core gnupg sun-java6-jdk <span class="kw2">flex</span> <span class="kw2">bison</span> gperf libsdl-dev ncurses-dev libesd0-dev libwxgtk2<span class="nu0">.6</span>-dev build-essential <span class="kw2">zip</span> curl libncurses5-dev zlib1g-dev valgrind</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re1">$TYPE_MACHINE</span> == <span class="st0">&quot;x86_64&quot;</span> <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Zetes en 64bits &#8230; on en rajoute une couche <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> &quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> apt-get -yqq <span class="kw2">install</span> ia32-libs lib32z1-dev lib32ncurses5-dev gcc-multilib g++-multilib lib32readline5-dev</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="sy0">!</span> -f <span class="re1">$BINDIR</span><span class="sy0">/</span>repo <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Récupération du fichier repo&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">wget</span> -qO <span class="re1">$BINDIR</span><span class="sy0">/</span>repo http:<span class="sy0">//</span>android.git.kernel.org<span class="sy0">/</span>repo <span class="sy0">&amp;&amp;</span> <span class="kw2">chmod</span> +x <span class="re1">$BINDIR</span><span class="sy0">/</span>repo</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="sy0">!</span> -d <span class="re1">$MYDROID</span> <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Création du dossier $MYDROID&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">mkdir</span> <span class="re1">$MYDROID</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">cd</span> <span class="re1">$MYDROID</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="sy0">!</span> -d <span class="re1">$MYDROID</span><span class="sy0">/</span>prebuilt<span class="sy0">/</span> <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$BINDIR</span><span class="sy0">/</span>repo init -u git:<span class="sy0">//</span>android.git.kernel.org<span class="sy0">/</span>platform<span class="sy0">/</span>manifest.git</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;Mise à jour du dépôt &#8230; ça prend du temps &#8230; beaucoup de temps :s&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$BINDIR</span><span class="sy0">/</span>repo <span class="kw2">sync</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">export</span> <span class="re2">CCOMPILER=</span><span class="re1">$MYDROID</span><span class="sy0">/</span>prebuilt<span class="sy0">/</span>linux-x86<span class="sy0">/</span>toolchain<span class="sy0">/</span>arm-eabi<span class="nu0">-4.4</span><span class="nu0">.0</span><span class="sy0">/</span>bin<span class="sy0">/</span>arm-eabi-</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">cd</span> <span class="re1">$MYDROID</span> <span class="sy0">&amp;&amp;</span> <span class="kw3">source</span> build<span class="sy0">/</span>envsetup.<span class="kw2">sh</span> <span class="sy0">&amp;&amp;</span> <span class="kw2">sed</span> -n -e <span class="st0">&quot;s/^add_lunch_combo//gp&quot;</span> vendor<span class="sy0">/*/</span>vendorsetup.<span class="kw2">sh</span> <span class="sy0">&amp;&amp;</span> lunch generic-eng <span class="sy0">&amp;&amp;</span> <span class="kw2">make</span> -j4</div>
</li>
</ol>
</div>
<p>Les fichiers de sorties de trouvent dans : $MYDROID/out/target/product/generic (les .img contiennent l&#8217;os , les logiciels et tout le bazard qu&#8217;embarque android).<br />
Voilà, laisser mouliner, puis tester-le en machine virtuelle avant l&#8217;install sur votre phone (en n&#8217;oubliant pas bien sûr de faire une sauvegarde <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ).</p>
<p>Pour tester votre système android fraichement compilé, il vous suffit d&#8217;utiliser AVD (fournit avec le SDK de dev de google), d&#8217;aller dans le dossier .android/avd/le nom d&#8217;une machine générée/, et d&#8217;y mettre votre image système (et vos autres img si ça vous chante).</p>
<p>Ce qui m&#8217;a donné la version éclair pour mon émulateur :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/Capture.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/03/Capture.png" alt="" title="Capture" width="331" height="493" class="aligncenter size-full wp-image-728" /></a></p>
<p>Quelques liens sympa (<del datetime="2010-03-04T21:22:03+00:00">dont je me suis grandement inspirés</del>, que j&#8217;ai plagiés) :</p>
<ol>
<li>[EN]Explicatif sur le <a href="http://benno.id.au/blog/2007/11/13/android-under-the-hood">fonctionnement d&#8217;android</a></li>
<li>Article plus poussé en français <a href="http://www.unixgarden.com/index.php/embarque/les-dessous-dandroid">d&#8217;unixgarden</a></li>
<li><a href="http://www.android-inside.com/2009/12/comment-acceder-a-android-market-sur-emulateur/">L&#8217;astuce pour tester</a> son system.img</li>
<li>le <a href="http://wiki.cyanogenmod.com/index.php/How_to_build_a_kernel_port">tuto de compilation</a> de cyanogen + packaging pour aller plus <del datetime="2010-03-05T20:44:41+00:00">haut</del> loin</li>
</ol>
<p>La compilation et l&#8217;installation d&#8217;un cyanogenmod sera pour plus tard <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=711">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/android/compiler-cyanogen-android-froyo-sur-ubuntu/" rel="bookmark" title="Permanent Link: Compiler Cyanogen (android froyo) sur Ubuntu">Compiler Cyanogen (android froyo) sur Ubuntu</a></li><li><a href="http://blog.gaetan-grigis.eu/mes-applicationsscripts/" rel="bookmark" title="Permanent Link: Mes Applications/Scripts">Mes Applications/Scripts</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/android-c2dm-notification-push-en-bash-avec-wget/" rel="bookmark" title="Permanent Link: Android C2DM Notification push en bash avec wget">Android C2DM Notification push en bash avec wget</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/creer-un-paquet-pour-les-ppa/" rel="bookmark" title="Permanent Link: Créer un paquet pour les ppa">Créer un paquet pour les ppa</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/mon-application-android-pour-les-horaires-de-la-cts/" rel="bookmark" title="Permanent Link: Mon Application Android pour les horaires de la CTS">Mon Application Android pour les horaires de la CTS</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/android/compiler-android-sur-ubuntu-9-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Un peu d&#8217;avancement dans l&#8217;application Android de la CTS &#8230;</title>
		<link>http://blog.gaetan-grigis.eu/non-classe/un-peu-davancement-dans-lapplication-android-de-la-cts/</link>
		<comments>http://blog.gaetan-grigis.eu/non-classe/un-peu-davancement-dans-lapplication-android-de-la-cts/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 20:07:24 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apk]]></category>
		<category><![CDATA[cts]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=668</guid>
		<description><![CDATA[Bijour &#8230; Voilà &#8230; j&#8217;ai un tout petit peu avancé dans mon application android (toujours aussi moche ^^) mais beaucoup plus fonctionnelle. L&#8217;affichage par défaut : Si l&#8217;on recherche directement une station (qui retourne un seul code), on affiche directement les horaires : Si l&#8217;on recherche une station approximativement (qui retourne plusieurs codes), on affiche [...]]]></description>
			<content:encoded><![CDATA[<p>Bijour &#8230;</p>
<p>Voilà &#8230; j&#8217;ai un tout petit peu avancé dans mon application android (toujours aussi moche ^^) mais beaucoup plus fonctionnelle.</p>
<p>L&#8217;affichage par défaut :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/defaut.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/defaut.png" alt="" title="defaut" width="319" height="263" class="aligncenter size-full wp-image-669" /></a></p>
<p>Si l&#8217;on recherche directement une station (qui retourne un seul code), on affiche directement les horaires :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/recup-code-1.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/recup-code-1.png" alt="" title="recup-code-1" width="320" height="475" class="aligncenter size-full wp-image-670" /></a></p>
<p>Si l&#8217;on recherche une station approximativement (qui retourne plusieurs codes), on affiche les différents codes :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/recuperation-code.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/recuperation-code.png" alt="" title="recuperation-code" width="320" height="450" class="aligncenter size-full wp-image-671" /></a></p>
<p>Une fois le code récupéré, on le saisie dans le champ &laquo;&nbsp;code station&nbsp;&raquo; et on &laquo;&nbsp;Check&nbsp;&raquo; pour récupérer les horaires :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/recup-par-code.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/recup-par-code.png" alt="" title="recup-par-code" width="319" height="341" class="aligncenter size-full wp-image-672" /></a></p>
<p>Et voilà &#8230; c&#8217;est moche mais fonctionnel &#8230; le <a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2010/02/CTS.apk">APK à télécharger</a> pour profiter de l&#8217;application.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=668">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/mes-applicationsscripts/" rel="bookmark" title="Permanent Link: Mes Applications/Scripts">Mes Applications/Scripts</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/android-c2dm-notification-push-en-bash-avec-wget/" rel="bookmark" title="Permanent Link: Android C2DM Notification push en bash avec wget">Android C2DM Notification push en bash avec wget</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/mon-application-android-pour-les-horaires-de-la-cts/" rel="bookmark" title="Permanent Link: Mon Application Android pour les horaires de la CTS">Mon Application Android pour les horaires de la CTS</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/java/application-android-pour-les-horaires-de-trambus-grenoblois-tagsemitag/" rel="bookmark" title="Permanent Link: Application android pour les horaires de tram/bus grenoblois (Tag/SemiTag)">Application android pour les horaires de tram/bus grenoblois (Tag/SemiTag)</a></li><li><a href="http://blog.gaetan-grigis.eu/android/compiler-cyanogen-android-froyo-sur-ubuntu/" rel="bookmark" title="Permanent Link: Compiler Cyanogen (android froyo) sur Ubuntu">Compiler Cyanogen (android froyo) sur Ubuntu</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/non-classe/un-peu-davancement-dans-lapplication-android-de-la-cts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mon Application Android pour les horaires de la CTS</title>
		<link>http://blog.gaetan-grigis.eu/programmation/mon-application-android-pour-les-horaires-de-la-cts/</link>
		<comments>http://blog.gaetan-grigis.eu/programmation/mon-application-android-pour-les-horaires-de-la-cts/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 19:13:42 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[cts]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=632</guid>
		<description><![CDATA[Amis Strasbourgeois bonsoir &#8230; Après un WE chargé sur Strasbourg, j&#8217;ai remarqué que la Compagnie des Transports de Strasbourg (CTS) avais mis en place un site web intéressant en temps réel (semble-t-il) pour calculer les horaires des BUS/Trams du réseau urbain. L&#8217;autre partie du service &#171;&#160;Temps Réel&#160;&#187; se fait par SMS par envoi du code [...]]]></description>
			<content:encoded><![CDATA[<p>Amis Strasbourgeois bonsoir &#8230;<br />
Après un WE chargé sur Strasbourg, j&#8217;ai remarqué que la Compagnie des Transports de Strasbourg (<a href="http://www.cts-strasbourg.fr/">CTS</a>) avais mis en place <a href="http://tr.cts-strasbourg.fr/">un site web</a> intéressant en temps réel (semble-t-il) pour calculer les horaires des BUS/Trams du réseau urbain.</p>
<p>L&#8217;autre partie du service &laquo;&nbsp;Temps Réel&nbsp;&raquo; se fait par SMS par envoi du code de la station à un numéro surtaxé &#8230; :s. Ayant un forfait 3G, je vais pas claquer un SMS surtaxé si je peux accéder au web gratuitement (quel radin <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ), mais le site est assez bof depuis mon navigateur, et c&#8217;est assez lent &#8230;</p>
<p>Ayant acheté un G1 dans le but de dev des applis, j&#8217;en ai profité pour faire ce que je sais (apparemment) faire de mieux &#8230; parser des sites web pour en extraire des informations, dans ce cas précis, les horaires des transports en commun.</p>
<p>L&#8217;application ressemble à ceci : (super moche je sais, mais elle fait sont boulot &#8230; c&#8217;est l&#8217;essentiel).</p>
<p><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2009/12/android-CTS.png"><img class="aligncenter size-full wp-image-633" title="android-CTS" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2009/12/android-CTS.png" alt="android-CTS" width="322" height="294" /></a>Pour le code source, j&#8217;ai tenté de faire au plus simple (traduction : le code est aussi beau que le screenshot fournit plus haut ^^, <em>pour ma décharge, je dirais que j&#8217;ai tout mis dans un fichier histoire de ne pas à avoir trop de fichier à fournir ici</em>).</p>
<p>Si vous avez des idées pour améliorer l&#8217;appli je suis open <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  (à part si c&#8217;est pour me recycler et changer de métier :s). Je pense changer l&#8217;appli en widget (si j&#8217;ai le temps &#8230;).<br />
<span id="more-632"></span><br />
Pour les fichiers, tout d&#8217;abord le main.java</p>
<div class="geshi no java">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">package</span> eu.<span class="me1">gaetangrigis</span>.<span class="me1">cts</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.BufferedReader;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.IOException;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.io.InputStreamReader;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.Calendar;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.regex.Matcher;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import java.util.regex.Pattern;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.app.Activity;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.app.Dialog;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.app.TimePickerDialog;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.app.TimePickerDialog.OnTimeSetListener;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.os.Bundle;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.view.View;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.view.View.OnClickListener;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.view.View.OnFocusChangeListener;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.view.ViewGroup.LayoutParams;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.widget.Button;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.widget.EditText;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.widget.TableLayout;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.widget.TableRow;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.widget.TextView;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import android.widget.TimePicker;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.apache.http.HttpResponse;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.apache.http.client.methods.HttpGet;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.apache.http.client.ClientProtocolException;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.apache.http.client.HttpClient;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">import org.apache.http.impl.client.DefaultHttpClient;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> Main <span class="kw2">extends</span> Activity <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="coMULTI">/** Called when the activity is first created. */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> <span class="kw3">Button</span> check<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> <span class="kw3">Button</span> clear<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> TextView t<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> EditText station<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> EditText heure<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> EditText minute<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> TableLayout table<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> <span class="kw4">int</span> mHeure<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> <span class="kw4">int</span> mMinute<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> TimePickerDialog.<span class="me1">OnTimeSetListener</span> mTimeSetListener<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">final</span> <span class="kw3">Calendar</span> c = <span class="kw3">Calendar</span>.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> onCreate<span class="br0">&#40;</span>Bundle savedInstanceState<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span>.<span class="me1">onCreate</span><span class="br0">&#40;</span>savedInstanceState<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; setContentView<span class="br0">&#40;</span>R.<span class="me1">layout</span>.<span class="me1">main</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Recuperation des champs</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; table = <span class="br0">&#40;</span>TableLayout<span class="br0">&#41;</span>findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">maTable</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; station = <span class="br0">&#40;</span>EditText<span class="br0">&#41;</span>findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">idStation</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; heure = <span class="br0">&#40;</span>EditText<span class="br0">&#41;</span>findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">heure</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; minute = <span class="br0">&#40;</span>EditText<span class="br0">&#41;</span>findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">minute</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;check=<span class="br0">&#40;</span><span class="kw3">Button</span><span class="br0">&#41;</span>findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">check</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;clear=<span class="br0">&#40;</span><span class="kw3">Button</span><span class="br0">&#41;</span>findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">clear</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; t =<span class="br0">&#40;</span>TextView<span class="br0">&#41;</span> findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">information</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Texte par défaut</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; mHeure = c.<span class="me1">get</span><span class="br0">&#40;</span><span class="kw3">Calendar</span>.<span class="me1">HOUR_OF_DAY</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; mMinute = c.<span class="me1">get</span><span class="br0">&#40;</span><span class="kw3">Calendar</span>.<span class="me1">MINUTE</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; t.<span class="me1">setText</span><span class="br0">&#40;</span><span class="st0">&quot;Entrez les informations demandées&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; station.<span class="me1">setText</span><span class="br0">&#40;</span><span class="st0">&quot;75&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; mTimeSetListener = <span class="kw2">new</span> TimePickerDialog.<span class="me1">OnTimeSetListener</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">public</span> <span class="kw4">void</span> onTimeSet<span class="br0">&#40;</span>TimePicker view, <span class="kw4">int</span> hourOfDay, <span class="kw4">int</span> minute<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mHeure = hourOfDay<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mMinute = minute<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;updateTime<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; updateTime<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; check.<span class="me1">setOnClickListener</span><span class="br0">&#40;</span><span class="kw2">new</span> OnClickListener<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw2">public</span> <span class="kw4">void</span> onClick<span class="br0">&#40;</span><span class="kw3">View</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span>startResearch<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; clear.<span class="me1">setOnClickListener</span><span class="br0">&#40;</span><span class="kw2">new</span> OnClickListener<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw2">public</span> <span class="kw4">void</span> onClick<span class="br0">&#40;</span><span class="kw3">View</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span>clearResearch<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; heure.<span class="me1">setOnFocusChangeListener</span><span class="br0">&#40;</span><span class="kw2">new</span> OnFocusChangeListener<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw2">public</span> <span class="kw4">void</span> onFocusChange<span class="br0">&#40;</span><span class="kw3">View</span> v, <span class="kw4">boolean</span> hasFocus<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw1">if</span><span class="br0">&#40;</span>hasFocus<span class="br0">&#41;</span>showDialog<span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; minute.<span class="me1">setOnFocusChangeListener</span><span class="br0">&#40;</span><span class="kw2">new</span> OnFocusChangeListener<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw2">public</span> <span class="kw4">void</span> onFocusChange<span class="br0">&#40;</span><span class="kw3">View</span> v, <span class="kw4">boolean</span> hasFocus<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="kw1">if</span><span class="br0">&#40;</span>hasFocus<span class="br0">&#41;</span>showDialog<span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> clearResearch<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;table.<span class="me1">removeAllViews</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> startResearch<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;t.<span class="me1">setText</span><span class="br0">&#40;</span><span class="st0">&quot;Recherche en cours&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; HttpGet site &nbsp; = <span class="kw2">new</span> HttpGet<span class="br0">&#40;</span><span class="st0">&quot;http://tr.cts-strasbourg.fr/HorTRweb/ResultatsHoraires.aspx?arret=&quot;</span>+station.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span>+<span class="st0">&quot;&amp;type=TOUS&amp;heure=&quot;</span>+heure.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span>+<span class="st0">&quot;&amp;min=&quot;</span>+minute.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; HttpClient cli = <span class="kw2">new</span> DefaultHttpClient<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; HttpResponse resp<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> res<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> content=<span class="kw2">new</span> <span class="kw3">String</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> ret = <span class="kw2">new</span> <span class="kw3">String</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">boolean</span> dTab=<span class="kw2">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;resp = cli.<span class="me1">execute</span><span class="br0">&#40;</span>site<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">BufferedReader</span> read = <span class="kw2">new</span> <span class="kw3">BufferedReader</span><span class="br0">&#40;</span><span class="kw2">new</span> <span class="kw3">InputStreamReader</span><span class="br0">&#40;</span>resp.<span class="me1">getEntity</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getContent</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">while</span><span class="br0">&#40;</span><span class="br0">&#40;</span>res=read.<span class="me1">readLine</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">!</span>=<span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>res.<span class="me1">matches</span><span class="br0">&#40;</span><span class="st0">&quot;.*&lt;table class=.depart.*&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>dTab=<span class="kw2">true</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>dTab==true<span class="sy0">&amp;&amp;</span>res.<span class="me1">matches</span><span class="br0">&#40;</span><span class="st0">&quot;.*&lt;/table&gt;.*&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>dTab=<span class="kw2">false</span><span class="sy0">;</span>break<span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>dTab==<span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span>content+=res<span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Pattern p = Pattern.<span class="me1">compile</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;td[^&gt;]*&gt;([^&lt;]*)&lt;/td&gt;&lt;td[^&gt;]*&gt;([^&lt;]*)&lt;/td&gt;&lt;td[^&gt;]*&gt;([^&lt;]*)&lt;/td&gt;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Matcher m = p.<span class="me1">matcher</span><span class="br0">&#40;</span>content<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">while</span><span class="br0">&#40;</span>m.<span class="me1">find</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> i=<span class="nu0">1</span><span class="sy0">;</span>i<span class="sy0">&lt;</span>=m.<span class="me1">groupCount</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>i++<span class="br0">&#41;</span><span class="br0">&#123;</span>ret+=m.<span class="me1">group</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>+<span class="st0">&quot; &quot;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; table.<span class="me1">addView</span><span class="br0">&#40;</span>addTextRow<span class="br0">&#40;</span>ret<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ret=<span class="st0">&quot;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">catch</span> <span class="br0">&#40;</span>ClientProtocolException e<span class="br0">&#41;</span> <span class="br0">&#123;</span>t.<span class="me1">setText</span><span class="br0">&#40;</span>e.<span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">catch</span> <span class="br0">&#40;</span><span class="kw3">IOException</span> e<span class="br0">&#41;</span> <span class="br0">&#123;</span>t.<span class="me1">setText</span><span class="br0">&#40;</span>e.<span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">finally</span><span class="br0">&#123;</span>t.<span class="me1">setText</span><span class="br0">&#40;</span><span class="st0">&quot;Recherche terminé&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> TableRow addTextRow<span class="br0">&#40;</span><span class="kw3">String</span> text<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;TableRow tr = <span class="kw2">new</span> TableRow<span class="br0">&#40;</span><span class="kw2">this</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; TextView tt = <span class="kw2">new</span> TextView<span class="br0">&#40;</span><span class="kw2">this</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; tt.<span class="me1">setText</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; tr.<span class="me1">addView</span><span class="br0">&#40;</span>tt<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">return</span> tr<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw3">Dialog</span> onCreateDialog<span class="br0">&#40;</span><span class="kw4">int</span> id<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span>id<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">0</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">return</span> <span class="kw2">new</span> TimePickerDialog<span class="br0">&#40;</span><span class="kw2">this</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mTimeSetListener, mHeure, mMinute, <span class="kw2">false</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">null</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> updateTime<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw3">String</span> add=<span class="st0">&quot;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; heure.<span class="me1">setText</span><span class="br0">&#40;</span>mHeure+<span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>mMinute<span class="sy0">&lt;</span><span class="nu0">10</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;add=<span class="st0">&quot;0&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; minute.<span class="me1">setText</span><span class="br0">&#40;</span>add+mMinute<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Puis le main.xml (qui définit l&#8217;interface graphique)</p>
<div class="geshi no xml">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;utf-8&quot;</span><span class="re2">?&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;LinearLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:orientation</span>=<span class="st0">&quot;vertical&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_width</span>=<span class="st0">&quot;fill_parent&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_height</span>=<span class="st0">&quot;fill_parent&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;TextView</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_width</span>=<span class="st0">&quot;fill_parent&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/information&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:text</span>=<span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;LinearLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:orientation</span>=<span class="st0">&quot;horizontal&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;TextView</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:text</span>=<span class="st0">&quot;Code de la station : &quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;EditText</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/idStation&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:text</span>=<span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/LinearLayout<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;LinearLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:orientation</span>=<span class="st0">&quot;horizontal&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;TextView</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:text</span>=<span class="st0">&quot;Heure voulue : &quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;EditText</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/heure&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;TextView</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:text</span>=<span class="st0">&quot;h&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;EditText</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/minute&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/LinearLayout<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;LinearLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:orientation</span>=<span class="st0">&quot;horizontal&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;Button</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:text</span>=<span class="st0">&quot;Check&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/check&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;Button</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:text</span>=<span class="st0">&quot;Clear&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/clear&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/LinearLayout<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;TableLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:id</span>=<span class="st0">&quot;@+id/maTable&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_width</span>=<span class="st0">&quot;fill_parent&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/TableLayout<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/LinearLayout<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>et enfin le Manifest.xml (pour ne pas oublier les permissions d&#8217;accès au net)</p>
<div class="geshi no java">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;?</span>xml version=<span class="st0">&quot;1.0&quot;</span> encoding=<span class="st0">&quot;utf-8&quot;</span><span class="sy0">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>manifest xmlns:android=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw2">package</span>=<span class="st0">&quot;eu.gaetangrigis.cts&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; android:versionCode=<span class="st0">&quot;1&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; android:versionName=<span class="st0">&quot;1.0&quot;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sy0">&lt;</span>application android:icon=<span class="st0">&quot;@drawable/icon&quot;</span> android:label=<span class="st0">&quot;@string/app_name&quot;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>activity android:name=<span class="st0">&quot;.Main&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:label=<span class="st0">&quot;@string/app_name&quot;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>intent-filter<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>action android:name=<span class="st0">&quot;android.intent.action.MAIN&quot;</span> /<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>category android:name=<span class="st0">&quot;android.intent.category.LAUNCHER&quot;</span> /<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>/intent-filter<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>/activity<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sy0">&lt;</span>/application<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sy0">&lt;</span>uses-sdk android:minSdkVersion=<span class="st0">&quot;4&quot;</span> /<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>uses-permission android:name=<span class="st0">&quot;android.permission.INTERNET&quot;</span> /<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>/manifest<span class="sy0">&gt;</span></div>
</li>
</ol>
</div>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=632">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/programmation/java/application-android-pour-les-horaires-de-trambus-grenoblois-tagsemitag/" rel="bookmark" title="Permanent Link: Application android pour les horaires de tram/bus grenoblois (Tag/SemiTag)">Application android pour les horaires de tram/bus grenoblois (Tag/SemiTag)</a></li><li><a href="http://blog.gaetan-grigis.eu/non-classe/un-peu-davancement-dans-lapplication-android-de-la-cts/" rel="bookmark" title="Permanent Link: Un peu d&#8217;avancement dans l&#8217;application Android de la CTS &#8230;">Un peu d&#8217;avancement dans l&#8217;application Android de la CTS &#8230;</a></li><li><a href="http://blog.gaetan-grigis.eu/android/application-android-pour-le-telechargement-des-versions-de-cyanogen/" rel="bookmark" title="Permanent Link: Application android pour le téléchargement des versions de Cyanogen">Application android pour le téléchargement des versions de Cyanogen</a></li><li><a href="http://blog.gaetan-grigis.eu/android/android-application-de-controle-a-distancebackupinfo/" rel="bookmark" title="Permanent Link: [Android] application de contrôle à distance/backup/info">[Android] application de contrôle à distance/backup/info</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/android-c2dm-notification-push-en-bash-avec-wget/" rel="bookmark" title="Permanent Link: Android C2DM Notification push en bash avec wget">Android C2DM Notification push en bash avec wget</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/programmation/mon-application-android-pour-les-horaires-de-la-cts/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

