<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.insideandroid.fr/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Android News</title>
  <link>http://www.insideandroid.fr/</link>
  <atom:link href="http://www.insideandroid.fr:82/feed/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Thu, 09 Feb 2012 08:42:26 +0100</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>De nouveaux Android arrivent</title>
    <link>http://www.insideandroid.fr/post/2009/10/10/De-nouveaux-Android-arrivent</link>
    <guid isPermaLink="false">urn:md5:d3c71e69eb17ae92bc7019470673ef38</guid>
    <pubDate>Sat, 10 Oct 2009 11:54:00 +0200</pubDate>
    <dc:creator>dgirard</dc:creator>
        <category>Tutorial</category>
            
    <description>    &lt;p&gt;Je viens de recevoir ce message de la part de l’équipe Android Market :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hello,&lt;br /&gt;
We're writing to inform you about a couple changes to Android Market that
require your attention.&lt;br /&gt;
First, we have added the ability to target applications by carrier in all
countries.  For example, if you are showing your app in the United States,
you can now choose among Sprint, T-Mobile, and Verizon Wireless.  If your
apps are intended for users of specific carriers, please go to the Android
Market developer website at &lt;a href=&quot;http://market.android.com/publish&quot;&gt;http://market.android.com/publish&lt;/a&gt; (in
the Publishing Options section under Locations) and target your applications to
those carriers accordingly.&lt;br /&gt;
Second, Android Market will soon be available on devices with different screen
sizes.  Until now, Android devices have only had &amp;quot;normal&amp;quot;-sized screens,
e.g., HVGA (320x480).  The latest platform release, Android 1.6, expands
support for upcoming devices that cover three different screen sizes: 
small, normal, and large.  Please note that Android Market will allow apps
built with the Android 1.5 SDK (or lower) to show only on normal- and
large-screened devices.  Android Market will allow apps built with the
Android 1.6 SDK to show on all three screen sizes.  Therefore, you will
need to upgrade your app to Android 1.6 if you want it to also show on small
screen devices that will launch in the coming weeks.  For complete details
on Android's support for different screen sizes and the implications for your
apps, we strongly recommend that you read the Android Developers Blogpost at
&lt;a href=&quot;http://android-developers.blogspot.com/2009/10/support-for-additional-screen.html&quot;&gt;
http://android-developers.blogspot.com/2009/10/support-for-additional-screen.html&lt;/a&gt;.&lt;br /&gt;

Thanks, and we look forward to continue working with you on Android&lt;br /&gt;
Market.&lt;br /&gt;
Sincerely,&lt;/p&gt;
&lt;p&gt;The Android Market Team&lt;/p&gt;
&lt;/blockquote&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Sortie du SDK Android 1.6</title>
    <link>http://www.insideandroid.fr/post/2009/09/16/Sortie-du-SDK-Android-1.6</link>
    <guid isPermaLink="false">urn:md5:9bacdd3494f2349b5d43e9e97ff250a1</guid>
    <pubDate>Wed, 16 Sep 2009 22:26:00 +0200</pubDate>
    <dc:creator>Patrice</dc:creator>
        <category>Actualité</category>
            
    <description>    &lt;p&gt;Le nouveau SDK 16 viens de sortir, et apporte son lot de nouveautés. Il
intègre les nouvelles fonctions d'android 1.6 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gestion de plusieurs tailles d'écran&lt;/li&gt;
&lt;li&gt;La fonction de recherche globale&lt;/li&gt;
&lt;li&gt;La nouvelle version du market place&lt;/li&gt;
&lt;li&gt;La fonction text2speach&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Une petite vidéo de présentation :&lt;/p&gt;
&lt;div class=&quot;external-media&quot; style=&quot;margin: 1em auto; text-align: center;&quot;&gt;
&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://www.youtube.com/v/MBRFkLKRwFw&amp;amp;hl=en&amp;amp;fs=1&quot; width=&quot;425&quot; height=&quot;350&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/MBRFkLKRwFw&amp;amp;hl=en&amp;amp;fs=1&quot; /&gt;
&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot; /&gt;&lt;/object&gt;&lt;br /&gt;
Android 1.6 Official Video&lt;/div&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/09/16/Sortie-du-SDK-Android-1.6#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/09/16/Sortie-du-SDK-Android-1.6#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/442343</wfw:commentRss>
      </item>
    
  <item>
    <title>Démonstration de Donut 2.0</title>
    <link>http://www.insideandroid.fr/post/2009/07/27/Demonstration-de-Donut-20</link>
    <guid isPermaLink="false">urn:md5:0404f8fc7e060d52f9c62c5aba49dfb0</guid>
    <pubDate>Mon, 27 Jul 2009 12:30:00 +0200</pubDate>
    <dc:creator>Patrice</dc:creator>
        <category>Actualité</category>
            
    <description>    &lt;p&gt;Sur le blog &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.autoroot.com/&quot;&gt;Autoroot&lt;/a&gt;,
Alexandre a fait un test complet de la prochaine version de Donut, la prochaine
version d'Android &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.frandroid.com/3502/nappelez-plus-android-2-0-donut/&quot;&gt;(qui n'est
probablement pas la version 2.0)&lt;/a&gt;. Le tout agrémenté d'images et surtout
d'une vidéo.&lt;/p&gt;
&lt;p&gt;Retrouvez le test ici :&lt;/p&gt;
&lt;p&gt;&lt;a hreflang=&quot;fr&quot; href=&quot;http://www.autoroot.com/2009/07/26/jai-teste-le-systeme-android-donut-beta-sur-un-htc-dream/&quot;&gt;
http://www.autoroot.com/2009/07/26/jai-teste-le-systeme-android-donut-beta-sur-un-htc-dream/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Merci à Alexandre qui nous a donné cette info.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/07/27/Demonstration-de-Donut-20#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/07/27/Demonstration-de-Donut-20#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/421328</wfw:commentRss>
      </item>
    
  <item>
    <title>HTC HERO - Démonstration</title>
    <link>http://www.insideandroid.fr/post/2009/06/24/HTC-HERO-Deacutemonstration</link>
    <guid isPermaLink="false">urn:md5:e9f259eb6981a39b7ead558141d3cf42</guid>
    <pubDate>Wed, 24 Jun 2009 16:21:00 +0200</pubDate>
    <dc:creator>Christophe</dc:creator>
        <category>Actualité</category>
        <category>Démonstration</category><category>HERO</category><category>HTC</category><category>Vidéo</category>    
    <description>    &lt;p&gt;Pour ceux qui suivent l'actualité sur Android, plusieurs vidéos et &amp;quot;news&amp;quot;
circulaient sur la toile ces derniers mois sur le prochain téléphone d'HTC,
surnommé HERO. Toutes nous promettaient une interface utilisateur complètement
revisitée par HTC. Aujourd'hui avec l'annonce officielle de sa
commercialisation, voici une petite vidéo qui l'accompagne.&lt;/p&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://www.youtube.com/v/FKTDSfbcbBU&amp;amp;hl=fr&amp;amp;fs=1&amp;amp;&quot; width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/FKTDSfbcbBU&amp;amp;hl=fr&amp;amp;fs=1&amp;amp;&quot; /&gt;
&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;
&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;p&gt;Vidéo du HTC HERO&lt;/p&gt;
&lt;/object&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=FKTDSfbcbBU&quot; hreflang=&quot;en&quot;&gt;voir la video sur
youtube&lt;/a&gt;&lt;/div&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/06/24/HTC-HERO-Deacutemonstration#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/06/24/HTC-HERO-Deacutemonstration#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/413134</wfw:commentRss>
      </item>
    
  <item>
    <title>Tests unitaires sous Eclipse avec le plugin Android</title>
    <link>http://www.insideandroid.fr/post/2009/06/15/Tests-unitaires-sous-Eclipse-avec-le-plugin-Android</link>
    <guid isPermaLink="false">urn:md5:b339351b7329469c6dba454ccf871305</guid>
    <pubDate>Mon, 15 Jun 2009 16:36:00 +0200</pubDate>
    <dc:creator>Florent</dc:creator>
        <category>Présentation</category>
        <category>eclipse</category><category>JUnit</category><category>tests unitaires</category>    
    <description>    &lt;p style=&quot;text-align: justify&quot;&gt;Lorsqu’on travaille avec le plugin Android pour
Eclipse, le lancement d’une configuration de type JUnit échoue avec un message
qui ne vous aidera pas vraiment :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TestsunitairessousEclipseaveclepluginAnd_E631_junitinternal_2.png&quot;&gt;
&lt;img style=&quot;border-width: 0; display: inline;&quot; title=&quot;junitinternal&quot; alt=&quot;junitinternal&quot; src=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TestsunitairessousEclipseaveclepluginAnd_E631_junitinternal_thumb.png&quot; height=&quot;132&quot; border=&quot;0&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify&quot;&gt;Cela est dû à l’inclusion du jar android dans le
classpath ; ce jar contenant sa propre version de JUnit destinée à être
utilisée dans un système Android, cela explique alors cette erreur (quoique
…).&lt;/p&gt;
&lt;p style=&quot;text-align: justify&quot;&gt;Dans la fenêtre «Run configurations», onglet
«Classpath», vous trouverez une ligne «Android 1.5» que vous pouvez supprimer.
Dorénavant les tests unitaires seront lancés avec une version standard de
JUnit.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TestsunitairessousEclipseaveclepluginAnd_E631_android15entry_4.png&quot;&gt;
&lt;img style=&quot;border-width: 0; display: inline;&quot; title=&quot;android15entry&quot; alt=&quot;android15entry&quot; src=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TestsunitairessousEclipseaveclepluginAnd_E631_android15entry_thumb_1.png&quot; height=&quot;484&quot; border=&quot;0&quot; width=&quot;497&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify&quot;&gt;Pour éviter cette manipulation à chaque fois
qu’une configuration de test est créée, vous avez aussi la possibilité
d’utiliser &lt;a href=&quot;http://www.testng.org&quot; target=&quot;_blank&quot;&gt;TestNG&lt;/a&gt;. Ainsi
vous n’aurez plus de conflit avec le jar d’Android (bien entendu il s’agit
d’utiliser les classes propres à TestNG et pas le support de JUnit). Le support
de TestNG n’est pas intégré par défaut dans Eclipse, il existe pour cela un
&lt;a href=&quot;http://testng.org/doc/download.html&quot; target=&quot;_blank&quot;&gt;plugin&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/06/15/Tests-unitaires-sous-Eclipse-avec-le-plugin-Android#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/06/15/Tests-unitaires-sous-Eclipse-avec-le-plugin-Android#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/410398</wfw:commentRss>
      </item>
    
  <item>
    <title>Binding JSON/Javabeans avec Jackson</title>
    <link>http://www.insideandroid.fr/post/2009/06/12/Binding-JSON/Javabeans-avec-Jackson</link>
    <guid isPermaLink="false">urn:md5:a8b56aee8560316b8b2f099ca7df3cc7</guid>
    <pubDate>Fri, 12 Jun 2009 15:33:00 +0200</pubDate>
    <dc:creator>Florent</dc:creator>
        <category>Présentation</category>
        <category>data binding</category><category>JSON</category><category>sérialisation</category>    
    <description>    &lt;p&gt;Nous avions déjà vu &lt;a href=&quot;http://www.insideandroid.fr/post/2009/05/25/Utilisation-de-XStream-sous-Android&quot;&gt;
comment sérialiser des objets en XML en utilisant des annotations&lt;/a&gt;, il est
également possible de sérialiser/désérialiser des Javabeans en JSON en quelques
lignes avec &lt;a href=&quot;http://jackson.codehaus.org/&quot;&gt;Jackson&lt;/a&gt;. Nous pouvons
isoler ces lignes de code dans une classe JsonSerializer :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;public class JsonSerializer implements Serializer&lt;br /&gt;
{&lt;br /&gt;
    private ObjectMapper om = new ObjectMapper();&lt;/p&gt;
&lt;p&gt;    public void serialize(OutputStream os, Object o) throws
IOException&lt;br /&gt;
    {&lt;br /&gt;
        serialize(new
OutputStreamWriter(os), o);&lt;br /&gt;
    }&lt;/p&gt;
&lt;p&gt;    public void serialize(Writer writer, Object o) throws
IOException&lt;br /&gt;
    {&lt;br /&gt;
        try&lt;br /&gt;
        {&lt;br /&gt;
           
om.writeValue(writer, o);&lt;br /&gt;
        } catch (JsonMappingException
e)&lt;br /&gt;
        {&lt;br /&gt;
           
System.out.println(e.getMessage());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;/p&gt;
&lt;p&gt;    public &amp;lt;T&amp;gt; T deserialize(Reader reader,
Class&amp;lt;T&amp;gt; clazz) throws IOException&lt;br /&gt;
    {&lt;br /&gt;
        return om.readValue(reader,
clazz);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maintenant, dans un Service ou un Adapter Android, nous pouvons lire/écrire
nos Javabeans dans des flux JSON :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;JsonSerializer js = new JsonSerializer();&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;// exemple de sérialisation&lt;/p&gt;
&lt;p&gt;js.serialize(flux, new Person(&amp;quot;Florent&amp;quot;, &amp;quot;Cappelle&amp;quot;)&lt;br /&gt;
            {{&lt;br /&gt;
                   
setTels(Arrays.&amp;lt;Tel&amp;gt;asList(new Tel(&amp;quot;012345678&amp;quot;,
Tel.HOME_LANDLINE)));&lt;br /&gt;
                   
setTels(Arrays.&amp;lt;Tel&amp;gt;asList(new Tel(&amp;quot;062345678&amp;quot;, Tel.MOBILE_LINE)));&lt;br /&gt;
               
}}&lt;/p&gt;
&lt;p&gt;);&lt;/p&gt;
&lt;p&gt;// désérialisation&lt;/p&gt;
&lt;p&gt;Person result = js.deserialize(reader, Person.class);&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Le mécanisme de sérialisation utilise les noms des getters et les valeurs
qu’ils retournent pour générer le flux JSON. Les collections et tableaux sont
convertis en leurs équivalents en JSON, ce qui donne par exemple :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;{“adresses”:[],”emails”:[], “firstname”:”Florent”, name:”Cappelle”,
“tels”:[“number”:”0612345678”, “type”:1]}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il est possible d’ignorer certains getters en les annotant avec @JsonIgnore
et il existe d’autres annotations pour adapter vos Javabeans avec un format
JSON prédéfini.&lt;/p&gt;
&lt;p&gt;Jackson est donc un choix pertinent pour la stack de développement Google
étant donné qu’il fonctionne aussi sur Google App Engine (sans avoir à le
modifier contrairement à XStream).&lt;/p&gt;
&lt;p&gt;À noter aussi que Jackson fournit des providers pour JAX-RS ainsi qu’une API
bas niveau (et donc plus rapide).&lt;/p&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/06/12/Binding-JSON/Javabeans-avec-Jackson#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/06/12/Binding-JSON/Javabeans-avec-Jackson#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/409786</wfw:commentRss>
      </item>
    
  <item>
    <title>Android HiveGotContacts : Lancement de l'application</title>
    <link>http://www.insideandroid.fr/post/2009/06/03/Android-HiveGotContacts-%3A-Lancement-de-l-application</link>
    <guid isPermaLink="false">urn:md5:b29320b6f3bb38bcc45790cd7929d272</guid>
    <pubDate>Wed, 03 Jun 2009 12:50:00 +0200</pubDate>
    <dc:creator>Adrien</dc:creator>
        <category>Evénement</category>
        <category>Android</category><category>AppEngine</category><category>Contacts</category><category>GWT</category><category>SFEIR</category>    
    <description>&lt;p&gt;Nous lançons aujourd'hui simultanément plusieurs &amp;quot;produits&amp;quot; liés entre eux
pour faciliter la gestion de votre identité numérique, un des produits
concernés se trouve être une application Android : HiveGotContacts.&lt;/p&gt;
&lt;p&gt;Elle réutilise le concept de Hive déjà rencontré précédemment sur ce blog
pour mettre en place un nouveau carnet de contacts, et est enrichie à travers
ses possibilités d'interaction avec de nombreux formats existants (les vCards,
les domaines en .tel), ainsi qu'avec un nouveau format, Ergosoom, qui se lie
avec l'application de gestion du même nom.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/hivegotcontacts.png&quot;&gt;&lt;img title=&quot;HiveGotContacts, juin 2009&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://www.insideandroid.fr/public/./.hivegotcontacts_m.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un visuel de l'application.&lt;/p&gt;    &lt;p&gt;On retrouve donc plusieurs applications :&lt;/p&gt;
&lt;p&gt;- Ergosoom, une application GWT/AppEngine qui permet de se créer un profil
virtuel. ( &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.ergosoom.com&quot;&gt;http://www.ergosoom.com&lt;/a&gt; )&lt;br /&gt;
&lt;br /&gt;
- DroidAnalytics, une application JSP/AppEngine qui nous aide à tracer les
exceptions d'Android ( &lt;a href=&quot;http://www.droidanalytics.com&quot;&gt;http://www.droidanalytics.com&lt;/a&gt; )&lt;/p&gt;
&lt;p&gt;- HiveGotContacts, une application pour Android qui permet de gérer ses
contacts dans une interface innovante, et qui apporte de nouvelles
fonctionalités par rapport au gestionnaire classique. ( &lt;a href=&quot;http://market.android.com/search?q=hivegotcontacts&quot;&gt;http://market.android.com/search?q=hivegotcontacts&lt;/a&gt;
)&lt;/p&gt;
&lt;p&gt;Tout n'est sans doute pas encore parfait, n'hésitez pas à nous envoyer vos
retours si vous décidez d'utiliser ces applications, afin que nous puissions
les faire évoluer dans le bon sens.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/photogroupe.png&quot;&gt;&lt;img title=&quot;PhotoGroupe, juin 2009&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://www.insideandroid.fr/public/./.photogroupe_m.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;L'équipe, de gauche à droite, Christophe, Adrien, Didier, Patrice, Florent
et Gregory.&lt;/p&gt;
&lt;p&gt;Note : L'application est open-source et son code est consultable sur Google
Code ici : &lt;a href=&quot;http://code.google.com/p/hivegotcontacts/&quot;&gt;http://code.google.com/p/hivegotcontacts/&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/06/03/Android-HiveGotContacts-%3A-Lancement-de-l-application#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/06/03/Android-HiveGotContacts-%3A-Lancement-de-l-application#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/407366</wfw:commentRss>
      </item>
    
  <item>
    <title>Android 2.0 DONUT</title>
    <link>http://www.insideandroid.fr/post/2009/05/28/Android-20-DONUT</link>
    <guid isPermaLink="false">urn:md5:4cb7117b67915bb80a77ce15a0178117</guid>
    <pubDate>Thu, 28 May 2009 11:40:00 +0200</pubDate>
    <dc:creator>Christophe</dc:creator>
        <category>Actualité</category>
        <category>Android 2.0</category><category>DONUT</category><category>GOOGLE I-O</category><category>video</category>    
    <description>    &lt;p&gt; &lt;/p&gt;
&lt;p&gt;Voici une première démonstration des nouvelles fonctionnalités de “DONUT”
réalisée&lt;/p&gt;
&lt;p&gt;par Romain GUY lors du GOOGLE I/O 2009&lt;/p&gt;
&lt;p&gt;Pour les impatients, allez directement à la 4ème minutes…&lt;/p&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://www.youtube.com/v/uX9nt8Cpdqg&amp;amp;hl=en&quot; width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/uX9nt8Cpdqg&amp;amp;hl=en&quot; /&gt;
&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;
&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;p&gt;Vidéo du GOOGLE I/O sur Android&lt;/p&gt;
&lt;/object&gt;&lt;/div&gt;
&lt;a href=&quot;http://www.youtube.com/watch?v=uX9nt8Cpdqg&amp;amp;feature=PlayList&amp;amp;p=41F4CEB92D80C4B7&amp;amp;index=8&quot; hreflang=&quot;en&quot;&gt;video sur youtube&lt;/a&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/05/28/Android-20-DONUT#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/05/28/Android-20-DONUT#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/405913</wfw:commentRss>
      </item>
    
  <item>
    <title>Utilisation de XStream sous Android</title>
    <link>http://www.insideandroid.fr/post/2009/05/25/Utilisation-de-XStream-sous-Android</link>
    <guid isPermaLink="false">urn:md5:591fddb0a84281145c7e9b1784ae46b2</guid>
    <pubDate>Mon, 25 May 2009 17:16:00 +0200</pubDate>
    <dc:creator>Florent</dc:creator>
        <category>Tutorial</category>
        <category>JSON</category><category>Sérialisation</category><category>XML</category><category>Xstream</category>    
    <description>    &lt;div&gt;XStream est une bibliothèque Java qui permet de sérialiser et de
désérialiser des objets en s’appuyant sur la réflexion et des Converters pour
la plupart des types de base (Float, Integer, Collections, ...). La dernière
version (1.3.1) fonctionne plutôt bien sous Android.&lt;/div&gt;
&lt;div&gt;Il est possible de paramètrer la sérialisation afin d’adapter une classe
Java à un format XML particulier et aussi d’éviter d’avoir le nom complet (avec
le package) de la classe dans le XML de sortie. Pour cela, Xstream dispose
d’annotations et des méthodes correspondantes dans XStream pour les version de
Java antérieures à JavaSE 5.&lt;/div&gt;
&lt;div&gt;Exemple avec les annotations :
&lt;div class=&quot;java5&quot; style=&quot;font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;&quot;&gt;
&lt;ol&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
@XStreamAlias(&amp;quot;person&amp;quot;)&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
public class Person implements Serializable {&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
 &lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
    private String name;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
    private String firstname;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
 &lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
    @XStreamImplicit(itemFieldName=&amp;quot;email&amp;quot;)&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
    private List&amp;lt;Email&amp;gt; emails;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
 &lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
    @XStreamImplicit(itemFieldName=&amp;quot;tel&amp;quot;)&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
    private List&amp;lt;Tel&amp;gt; tels;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
 &lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
    public Person() {&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
    }&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
    // utiliser xstream.processAnnotations(Person.class);&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
}&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
Et l’équivalent avec les méthodes de XStream :
&lt;div class=&quot;java5&quot; style=&quot;font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;&quot;&gt;
&lt;ol&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
xstream.alias(&amp;quot;person&amp;quot;, Person.class);&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
xstream.addImplicitCollection(Person.class, &amp;quot;emails&amp;quot;, &amp;quot;email&amp;quot;,
Email.class);&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
xstream.addImplicitCollection(Person.class, &amp;quot;tels&amp;quot;, &amp;quot;tel&amp;quot;, Tel.class);&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
Et le résultat de la sérialisation d’un objet Person :&lt;/div&gt;
&lt;div&gt;&lt;img src=&quot;http://www.insideandroid.fr/public/./.xstream_m.jpg&quot; alt=&quot;&quot; style=&quot;margin-top: 0; margin-right: auto; margin-bottom: 0; margin-left: auto; display: block;&quot; title=&quot;xstream.png, mai 2009&quot; /&gt;&lt;/div&gt;
&lt;div&gt;Au niveau des limitations, la plateforme Android ne supporte pas les
parseurs StAX et par conséquent le Driver JettisonMappedXmlDriver qui permet de
sérialiser/désérialiser en JSON. De plus, XStream s’appuie sur la variable
«java.specification.version» afin de déterminer la version de Java : Android
fixe cette variable à 0.9, ce qui désactive la gestion des annotations
Xstream.&lt;/div&gt;
&lt;div&gt;Toutefois, il est possible d’étendre la classe XStream et de redéfinir la
méthode qui crée les classes de mapping afin de pouvoir utiliser les
annotations Xstream. Il s’agit de la classe AndroidXStream dans l’archive zip
associée à ce billet.&lt;/div&gt;
&lt;div&gt;L’analyse des annotations est beaucoup plus lente que les méthodes de la
classe XStream mais ces dernières rendent le code plus difficile à maintenir à
mon goût.&lt;/div&gt;
&lt;div&gt;Il est également possible d’utiliser le
Driver JsonHierarchicalStreamDriver afin de sérialiser un objet en JSON,
par contre la désérialisation n’est pas supportée. Il faudra alors utiliser les
classes du package org.json (déjà présent dans l’API Android).&lt;/div&gt;
&lt;div&gt;XStream se révèle particulièrement utile avec les Web Services qui
utilisent des formats assez complexes. Pour persister des données en local les
classes ObjectOutputStream et ObjectInputStream seront plus efficaces.&lt;/div&gt;
&lt;div&gt;Vous trouverez un projet d’exemple dans cette archive : &lt;a href=&quot;http://www.insideandroid.fr/public/XstreamDemo.zip&quot;&gt;XstreamDemo.zip&lt;/a&gt;&lt;/div&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/05/25/Utilisation-de-XStream-sous-Android#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/05/25/Utilisation-de-XStream-sous-Android#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/405026</wfw:commentRss>
      </item>
    
  <item>
    <title>Android Captcha : Réutiliser un composant Google</title>
    <link>http://www.insideandroid.fr/post/2009/05/15/Android-Captcha-%3A-Reutiliser-un-composant-Google</link>
    <guid isPermaLink="false">urn:md5:e71f9ee9248251fbef2beafe94f95167</guid>
    <pubDate>Fri, 15 May 2009 12:09:00 +0200</pubDate>
    <dc:creator>Adrien</dc:creator>
        <category>Tutorial</category>
        <category>Android</category><category>captcha</category><category>sources</category><category>Tutorial</category>    
    <description>&lt;p style=&quot;margin-bottom: 0cm;&quot;&gt;L'interface de base d'Android possède de
nombreux gadgets qui s'avèrent très intéressants. Cependant, tous ne sont pas
visibles publiquement dans la librairie, mais Android étant un projet open
source, et les sources étant accessibles, il est donc tout à fait possible
d'aller les récupérer pour les adapter.&lt;/p&gt;
&lt;a href=&quot;http://www.insideandroid.fr/public/captcha.png&quot;&gt;&lt;img title=&quot;Photo Captcha, mai 2009&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://www.insideandroid.fr/public/captcha.png&quot; /&gt;&lt;/a&gt;    &lt;p style=&quot;margin-bottom: 0cm;&quot;&gt;C'est le cas du « sliding captcha »
utilisé pour verrouiller l'écran de votre téléphone. Ce gadget repose sur les
classes LockPatternView et LinearLayoutWithDefaultTouchRecipient disponibles
sur le repository google ici : &lt;a href=&quot;http://android.git.kernel.org/?p=platform/frameworks/base.git;a=tree;f=core/java/com/android/internal/widget;h=c23e001e125f7929bd87b0d6e8e0b779d3af23f5;hb=54b6cfa9a9e5b861a9930af873580d6dc20f773c&quot;&gt;
Lien vers le repository&lt;/a&gt; (ou en fichier joint avec le projet captcha dans
leur version déjà adaptée).&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0cm;&quot;&gt;Le code-source de google est comme toujours
assez clair. Ici, il nous est proposé une interface OnPatternListener que nous
pouvons implémenter pour fabriquer notre propre PatternListener et gérer nous
même nos patterns.&lt;br /&gt;
&lt;br /&gt;
De base, le composant est programmé de façon à essayer d'aller interagir avec
le captcha de sécurité stocké dans votre téléphone. Il faut donc se débarrasser
de cette partie, et la remplacer par notre propre Listener.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0cm;&quot;&gt;C'est ce qui est fait avec MyPatternListener et
quelques modifications dans le LockPatternView (voir code source joint avec cet
article). Le code n'est pas très compliqué et très simple à mettre en
œuvre.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0cm;&quot;&gt;On voit également que l'aspect graphique dépend
de bitmaps qui sont chargés, et qu'on peut donc les modifier pour s'approprier
le captcha. C'est ce qui a été fait ici, avec une version hexagonale des zones
d'appui, pour faire un composant qui puisse s'accorder dans une application
avec les HiveLayouts déjà vus précédemment par exemple.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0cm;&quot;&gt;On pourrait envisager des extensions pour offrir
plus de possibilités différentes de patterns, ou même qui sait, un jour, le
support du multitouch, mais ce sera l'objet d'un éventuel billet ultérieur.&lt;/p&gt;</description>
    
          <enclosure url="http://www.insideandroid.fr/public/Captcha.zip"
      length="43312" type="application/zip" />
    
    
          <comments>http://www.insideandroid.fr/post/2009/05/15/Android-Captcha-%3A-Reutiliser-un-composant-Google#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/05/15/Android-Captcha-%3A-Reutiliser-un-composant-Google#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/402297</wfw:commentRss>
      </item>
    
  <item>
    <title>Les developpeurs francais peuvent vendre leurs applications Android</title>
    <link>http://www.insideandroid.fr/post/2009/05/13/Les-deacuteveloppeurs-francais-peuvent-vendre-leurs-applications-Android</link>
    <guid isPermaLink="false">urn:md5:e685e3863c9e724a59c084caefb6ef7f</guid>
    <pubDate>Wed, 13 May 2009 10:39:00 +0200</pubDate>
    <dc:creator>dgirard</dc:creator>
            
    <description>    &lt;p&gt;Eric Chu :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We have also added seller support for developers from Germany, France,&lt;br /&gt;
Spain, the Netherlands, and Austria.  Developers from these countries
can&lt;br /&gt;
now go to the publisher website to publish their priced applications.&lt;br /&gt;
Google Checkout serves as the payment and billing mechanism for Android&lt;br /&gt;
Market in all countries.  Developers who do not already have a
Google&lt;br /&gt;
Checkout merchant account can easily sign up for one via the publisher&lt;br /&gt;
website.  Developers can find more information about priced
applications&lt;br /&gt;
in Android Market at http://market.android.com/support/.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Recu par email.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/05/13/Les-deacuteveloppeurs-francais-peuvent-vendre-leurs-applications-Android#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/05/13/Les-deacuteveloppeurs-francais-peuvent-vendre-leurs-applications-Android#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/401761</wfw:commentRss>
      </item>
    
  <item>
    <title>Android Cupcake 1.5 : Réaliser son widget</title>
    <link>http://www.insideandroid.fr/post/2009/05/07/Android-Cupcake-15-%3A-Realiser-son-widget</link>
    <guid isPermaLink="false">urn:md5:a781c5405c229ad35fc93bad39f5bea7</guid>
    <pubDate>Thu, 07 May 2009 11:15:00 +0200</pubDate>
    <dc:creator>Adrien</dc:creator>
        <category>Tutorial</category>
        <category>Android</category><category>sources</category><category>Tutorial</category><category>Widget</category>    
    <description>Bonjour, depuis la sortie du dernier framework, une nouvelle possibilité
réclamée depuis longtemps est apparue : la possibilité de faire vos propres
widgets et de les ajouter sur votre home. Nous allons voir dans les grandes
lignes ce qu'il faut faire, les limitations, et vous retrouverez en pièce
jointe un widget HelloWorld déjà fait.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.insideandroid.fr/public/widgets.png&quot;&gt;&lt;img title=&quot;Screen widgets, mai 2009&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://www.insideandroid.fr/public/widgets.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;    Les éléments importants :&lt;br /&gt;
&lt;br /&gt;
Dans AndroidManifest.xml :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;receiver android:name=&amp;quot;.MonWidget&amp;quot;
android:label=&amp;quot;@string/app_name&amp;quot;&amp;gt;&lt;br /&gt;
          
 &amp;lt;intent-filter&amp;gt;&lt;br /&gt;
              
 &amp;lt;action android:name=&amp;quot;android.appwidget.action.APPWIDGET_UPDATE&amp;quot;
/&amp;gt;&lt;br /&gt;
          
 &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;
            &amp;lt;meta-data
android:name=&amp;quot;android.appwidget.provider&amp;quot;&lt;br /&gt;
              
 android:resource=&amp;quot;@xml/widget&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/receiver&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut récupérer l'action APPWIDGET_UPDATE, et signaler la position d'un
fichier xml qui décrit le widget, ici le fichier xml/widget.xml :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;appwidget-provider
xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    android:minWidth=&amp;quot;146dip&amp;quot; android:minHeight=&amp;quot;72dip&amp;quot;&lt;br /&gt;
    android:updatePeriodMillis=&amp;quot;2000&amp;quot;
android:initialLayout=&amp;quot;@layout/widget_layout&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il spécifie une taille minimale pour le widget. Pour obtenir la taille,
mutipliez le nombre de cases voulues par 74 dip, puis enlevez 2 dip. Il faut
également spécifier la période de mise à jour du widget, vous devriez garder
cette valeur la plus haute possible pour réduire la consommation de votre
widget, n'utilisez de faibles valeurs que pour le dev. Il faut également
spécifier un layout initial pour notre widget, il s'agit d'un layout standard
comme tout layout xml d'android, mais il subit les limitations que nous verrons
plus bas.&lt;br /&gt;
&lt;br /&gt;
Et enfin la classe MonWidget :&lt;br /&gt;
&lt;br /&gt;
public class MonWidget extends AppWidgetProvider {&lt;br /&gt;
    @Override&lt;br /&gt;
    public void onUpdate(Context context, AppWidgetManager
appWidgetManager,&lt;br /&gt;
            int[]
appWidgetIds) {&lt;br /&gt;
&lt;br /&gt;
        RemoteViews updateViews = new
RemoteViews(context.getPackageName(),&lt;br /&gt;
               
R.layout.widget_layout);&lt;br /&gt;
        &lt;br /&gt;
        updateViews.setTextColor(R.id.text,
0xFF000000);&lt;br /&gt;
       
updateViews.setTextViewText(R.id.text, &amp;quot;Bonjour, Android&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        ComponentName thisWidget = new
ComponentName(context, MonWidget.class);&lt;br /&gt;
       
appWidgetManager.updateAppWidget(thisWidget, updateViews);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Cette classe hérite AppWidgetProvider, la nouvelle classe du 1.5 qui est dédiée
à la création de widget. Pour faire des actions à chaque update, il faut
surcharger la méthode onUpdate et récupérer une RemoteViews de la manière
ci-dessus.&lt;br /&gt;
Cependant, les widgets souffrent de limitations : la manipulation des vues doit
se faire à travers le XML, et vous êtes obligés d'utiliser uniquement des vues
de la liste suivante, sans possibilité d'y ajouter les vôtres :&lt;br /&gt;
&lt;br /&gt;
AbsoluteLayout AnalogClock Button Chronometer FrameLayout ImageButton ImageView
LinearLayout ProgressBar RelativeLayout TextView&lt;br /&gt;
De plus, la manipulation de RemoteViews offre assez peu de possibilités, il ne
sera donc même pas possible d'utiliser toutes les fonctionnalités des vues
autorisées (particulièrement au niveau de la détection de touches /
pressions).&lt;br /&gt;
&lt;br /&gt;
Les widgets sont donc de bons moyens de réaliser des agrégateurs de contenus,
mais fabriquer un petit gadget interactif (du type xEyes par exemple) est pour
l'instant impossible compte tenu des restrictions de sécurité.</description>
    
          <enclosure url="http://www.insideandroid.fr/public/MonWidget.zip"
      length="6293" type="application/zip" />
    
    
          <comments>http://www.insideandroid.fr/post/2009/05/07/Android-Cupcake-15-%3A-Realiser-son-widget#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/05/07/Android-Cupcake-15-%3A-Realiser-son-widget#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/400293</wfw:commentRss>
      </item>
    
  <item>
    <title>Tutorial : Les dossiers dynamiques ou Live Folder</title>
    <link>http://www.insideandroid.fr/post/2009/05/06/Tutorial-%3A-Les-dossiers-dynamiques-ou-Live-Folder</link>
    <guid isPermaLink="false">urn:md5:d0f151bfaa63d119cb08a64a49627cb2</guid>
    <pubDate>Wed, 06 May 2009 17:11:00 +0200</pubDate>
    <dc:creator>Patrice</dc:creator>
        <category>Tutorial</category>
        <category>content provider</category><category>liveFolder</category><category>sms</category><category>tutorial</category>    
    <description>&lt;p style=&quot;margin-top: 0;&quot;&gt;Un dossier dynamique est un raccourci sur le bureau
qui affiche une liste ou une grille avec des informations dynamiques qui
viennent d’une application. Cela peut être les derniers contacts appelés, les
derniers favoris, etc …&lt;/p&gt;
&lt;p&gt;Nous allons voir comment créer ces dossiers pour afficher nos derniers SMS.
Pour cela, on va utiliser l’astuce décrite dans un précédent &lt;a href=&quot;http://www.insideandroid.fr/post/2009/04/06/Acceacuteder-aux-SMS-du-teacuteleacutephone&quot; target=&quot;_blank&quot;&gt;billet&lt;/a&gt; pour accèder aux SMS de l’application.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;a href=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialLesdossiersdynamiquesouLiveFolde_F1AA_livefoldersms_2.png&quot;&gt;&lt;img title=&quot;livefoldersms&quot; alt=&quot;livefoldersms&quot; src=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialLesdossiersdynamiquesouLiveFolde_F1AA_livefoldersms_thumb.png&quot; style=&quot;border-width: 0; display: block; float: none; margin-left: auto; margin-right: auto;&quot; width=&quot;204&quot; border=&quot;0&quot; height=&quot;304&quot; /&gt;&lt;/a&gt;    &lt;p&gt;Il y a deux étapes, tout d’abord créer le dossier dynamique, enfin créer le
contenu qui sera affiché.&lt;/p&gt;
&lt;h2&gt;Création du dossier Dynamique&lt;/h2&gt;
&lt;p&gt;La création d’un dossier dynamique est très simple, car cela fonctionne sur
le système des Intent. Il faut commencer par créer une activité qui va
s’occuper de créer ce dossier. Cette activité peut afficher des informations et
en demander à l’utilisateur pour configurer le dossier. L’activité doit ensuite
retourner un RESULT_OK en envoyant un Intent avec l’adresse du content provider
pour afficher les données dans le champ Date et les paramètres du dossier dans
les données extra :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LiveFolders.EXTRA_LIVE_FOLDER_NAME : Le nom du dossier&lt;/li&gt;
&lt;li&gt;LiveFolders.EXTRA_LIVE_FOLDER_ICON : L’icône du fichier&lt;/li&gt;
&lt;li&gt;LiveFolders.EXTRA_LIVE_FOLDER_BASE_INTENT : L’Intent a appeler lors de la
sélection d’un élément de la liste&lt;/li&gt;
&lt;li&gt;LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE : Le type d’affichage qui peut
être mis à LiveFolders.DISPLAY_MODE_LIST pour un affichage en liste, ou à
LiveFolders.DISPLAY_MODE_GRID pour un affichage en grille&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voici donc une fonction très simple pour créer l'Intent à retourner :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialLesdossiersdynamiquesouLiveFolde_F1AA_image_8.png&quot;&gt;
&lt;img style=&quot;border: 0 none ; display: inline;&quot; title=&quot;image&quot; alt=&quot;image&quot; src=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialLesdossiersdynamiquesouLiveFolde_F1AA_image_thumb_3.png&quot; width=&quot;517&quot; border=&quot;0&quot; height=&quot;305&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;L'uri est l'url du content Provider qui donnera les informations pour
remplir le dossier et le baseUri est l'url de base auquel est concaténé l'Id de
celui-ci pour accéder à l'élément lorsqu'on le sélectionne.&lt;/p&gt;
&lt;p&gt;Voilà nous pouvons maintenant faire une activité qui va juste retourner
cette Intent :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialLesdossiersdynamiquesouLiveFolde_F1AA_image_4.png&quot;&gt;
&lt;img style=&quot;border-width: 0; display: inline;&quot; title=&quot;image&quot; alt=&quot;image&quot; src=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialLesdossiersdynamiquesouLiveFolde_F1AA_image_thumb_1.png&quot; width=&quot;495&quot; border=&quot;0&quot; height=&quot;291&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Il faut maintenant déclarer cette activité dans le AndroidManifest.xml, il
faut pour cela ajouter l'action CREATE_LIVE_FOLDER dans la liste des
intents-filters pour qu'elle soit reconnue par le système comme une activité
qui crée un dossier dynamique.&lt;/p&gt;
&lt;p&gt; &lt;a href=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialLesdossiersdynamiquesouLiveFolde_F1AA_image_6.png&quot;&gt;&lt;img style=&quot;border: 0 none ; display: inline;&quot; title=&quot;image&quot; alt=&quot;image&quot; src=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialLesdossiersdynamiquesouLiveFolde_F1AA_image_thumb_2.png&quot; width=&quot;583&quot; border=&quot;0&quot; height=&quot;127&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Voilà, la création du dossier est finie, si vous installez cette
application, et que vous allez sur la page d’accueil, et vous cliquez sur le
menu puis sur l’option “Ajouter”(Add) ou un clic long sur le fond d’écran, vous
avez l’entrée “Dossiers” (Folders) qui affiche ensuite la liste des dossiers
dynamiques, vous verrez votre dossier. Votre application se lance et retourne
tout de suite l’Intent que vous avez créé, et aussitôt votre dossier apparaît
sur la page d’accueil. En l’ouvrant, votre dossier plantera, car il nous faut
encore créer le content Provider.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialLesdossiersdynamiquesouLiveFolde_F1AA_image_10.png&quot;&gt;
&lt;img style=&quot;border: 0 none ; display: block; float: none; margin-left: auto; margin-right: auto;&quot; title=&quot;image&quot; alt=&quot;image&quot; src=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialLesdossiersdynamiquesouLiveFolde_F1AA_image_thumb_4.png&quot; width=&quot;180&quot; border=&quot;0&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Content Provider :&lt;/h2&gt;
&lt;p&gt;Notre dossier dynamique retourne l’url du contenu, lors de l’ouverture du
dossier, android va faire une requête à notre content provider
(SMSContentProvider). Ce content provider doit retourner deux colonnes :
LiveFolders._ID qui contient l’id de l’élèment et LiveFolders.NAME qui contient
le nom de l’élément. On peut aussi retourner LiveFolders.DESCRIPTION pour
afficher un texte en dessous ou LiveFolders.ICON_RESSOURCE pour afficher une
icône. Comme le content provider de l’application SMS d’android ne retourne pas
ses colonnes, nous devons créer notre content provider et à l’intérieur de
celui-ci faire appel au content provider de l’application SMS.&lt;/p&gt;
&lt;p&gt;Voici donc le code principal de notre content Provider :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialLesdossiersdynamiquesouLiveFolde_F1AA_image_12.png&quot;&gt;
&lt;img style=&quot;border: 0 none ; display: inline;&quot; title=&quot;image&quot; alt=&quot;image&quot; src=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialLesdossiersdynamiquesouLiveFolde_F1AA_image_thumb_5.png&quot; width=&quot;683&quot; border=&quot;0&quot; height=&quot;435&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Le reste de la classe contient les méthodes vides d’ajout, de mise à jour,
et de suppression du contenu qui ne servent pas pour notre application mais qui
sont obligatoires pour implémenter l’interface ContentProvider.&lt;/p&gt;
&lt;p&gt;La méthode principale est la méthode query, nous commençons par vérifier que
l’uri match bien avec notre UriMatcher. Puis nous appelons la methode query sur
le ContentResolver qui va nous permettre de récupérer les données depuis le
content provider de l’application SMS. Nous renommons les colonnes par les
colonnes demandées par android et trions les résultats par date décroissante.
Le MergeCursor est là à cause d’une limitation avec les curseurs entre
plusieurs processus.&lt;/p&gt;
&lt;p&gt;Pour la colonne _ID, nous utilisons le numéro de téléphone au lieu de l’ID
du SMS car il n’est pas possible d’ouvrir l’application SMS pour afficher un
SMS par un ID. Nous contournons cela en ouvrant l’application pour écrire un
SMS au numéro de téléphone, ce qui a la particularité d’afficher la
conversation avec ce contact au dessus du champ de saisie.&lt;/p&gt;
&lt;p&gt;Voilà, maintenant, vous pouvez installer et tester votre dossier dynamique
qui affichera vos SMS triés du plus récent au plus ancien.&lt;/p&gt;</description>
    
          <enclosure url="http://www.insideandroid.fr/public/LiveFolderSMS.zip"
      length="10551" type="application/zip" />
    
    
          <comments>http://www.insideandroid.fr/post/2009/05/06/Tutorial-%3A-Les-dossiers-dynamiques-ou-Live-Folder#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/05/06/Tutorial-%3A-Les-dossiers-dynamiques-ou-Live-Folder#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/400115</wfw:commentRss>
      </item>
    
  <item>
    <title>Android Cupcake : comment flasher le Dev Phone</title>
    <link>http://www.insideandroid.fr/post/2009/04/29/Android-Cupcake-%3A-comment-flasher-le-Dev-Phone</link>
    <guid isPermaLink="false">urn:md5:8fe776c5dec51ddc6b9e148eb94d4bf0</guid>
    <pubDate>Wed, 29 Apr 2009 13:04:00 +0200</pubDate>
    <dc:creator>Florent</dc:creator>
        <category>Tutorial</category>
        <category>Android</category><category>Cupcake</category><category>Dev phone</category>    
    <description>    Il existe depuis peu une version officielle de l’image système de Cupcake pour
les HTC Dev Phone. La procédure de mise à jour est rapide, sans risque de
blocage non récupérable et en plus conserve les applications que vous avez déjà
installées ainsi que leurs données.
&lt;div&gt;Sachez aussi que cette procédure est réversible.&lt;br /&gt;
&lt;div&gt;Vous aurez besoin de deux archives zip à télécharger sur le site de HTC :
http://www.htc.com/www/support/android/adp.html&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;ota-radio-2_22_19_26I.zip (Radio Image Android 1.5)&lt;/li&gt;
&lt;li&gt;signed-dream_devphone-ota-147201.zip (Recovery Image 1.5)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;La première étape est de mettre à jour le firmware radio :&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Assurez-vous que la SDCard est bien connectée au téléphone, transférez la
première archive (ota-radio-2_22_19_26I.zip) vers la SDCard et renommez-la en
update.zip, voilà comment faire en ligne de commande : &lt;/li&gt;
&lt;li style=&quot;list-style: none&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&amp;lt;ANDROID_SDK&amp;gt;\tools\adb -d push ota-radio-2_22_19_26I.zip
/sdcard/update.zip&lt;/li&gt;
&lt;li&gt;&amp;lt;ANDROID_SDK&amp;gt;\tools\adb -d shell sync&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Arrêtez le téléphone, puis démarrez-le en mode recovery en maintenant
appuyé la touche Home.&lt;/li&gt;
&lt;li&gt;Vous devriez avoir un écran à fond noir avec une icône contenant un point
d’exclamation, effectuez la combinaison de touches ALT+L pour faire apparaître
les options :&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/recovery2.png&quot;&gt;&lt;img src=&quot;http://www.insideandroid.fr/public/./.recovery2_s.jpg&quot; alt=&quot;&quot; style=&quot;margin-top: 0; margin-right: auto; margin-bottom: 0; margin-left: auto; display: block;&quot; title=&quot;Android mode recovery, avr 2009&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Vous pouvez ignorer l’erreur &amp;quot;Can’t open ...&amp;quot;. Faites ALT+S, le firmware se
met alors à jour. une fois la mise à jour terminée, redémarrez le téléphone
avec Home+Back.&lt;/li&gt;
&lt;li&gt;Le système n’est alors toujours pas mis à jour. Transférez la deuxième
archive (signed-dream_devphone-ota-147201.zip) de la même façon que la première
(vers /sdcard/update.zip), redémarrez le téléphone en mode recovery, ALT+L,
ALT+S, puis Home+Back une fois la mise à jour terminée.&lt;/li&gt;
&lt;li&gt;Le téléphone redémarre plusieurs fois, patientez un peu et vous aurez alors
le nouveau système Android 1.5 (Cupcake).&lt;/li&gt;
&lt;li&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.insideandroid.fr/public/infos.png&quot;&gt;&lt;img src=&quot;http://www.insideandroid.fr/public/./.infos_s.jpg&quot; alt=&quot;&quot; style=&quot;margin-top: 0; margin-right: auto; margin-bottom: 0; margin-left: auto; display: block;&quot; title=&quot;Android cupcake infos ADP, avr 2009&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;Pour plus de détails sur les mises à jour, il existe un Google Groups
dédié : &lt;a href=&quot;http://groups.google.com/group/Android-DevPhone-Updating&quot;&gt;http://groups.google.com/group/Android-DevPhone-Updating&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/04/29/Android-Cupcake-%3A-comment-flasher-le-Dev-Phone#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/04/29/Android-Cupcake-%3A-comment-flasher-le-Dev-Phone#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/398161</wfw:commentRss>
      </item>
    
  <item>
    <title>Android 1.5 is here!</title>
    <link>http://www.insideandroid.fr/post/2009/04/27/Android-15-is-here</link>
    <guid isPermaLink="false">urn:md5:5035f41f0b4b090363146d8807e5a248</guid>
    <pubDate>Mon, 27 Apr 2009 21:01:00 +0200</pubDate>
    <dc:creator>dgirard</dc:creator>
            
    <description>    &lt;p&gt;Xavier Ducrohet&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I am also happy to let you know that our partners at HTC have made available
new system images to upgrade your Android Dev Phone 1 (ADP1) to Android 1.5.
This new version (which is only available for the ADP1) is based on the Cupcake
branch from the Android Open Source Project and corresponds to the system image
of the Android 1.5 SDK, release 1. If you have questions about the process of
updating your device, you can ask the mailing list that we've set up.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://android-developers.blogspot.com/2009/04/android-15-is-here.html&quot;&gt;Android
1.5 is here!&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/04/27/Android-15-is-here#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/04/27/Android-15-is-here#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/397686</wfw:commentRss>
      </item>
    
  <item>
    <title>Tutorial : Manipuler les contacts - STEP 1 : READ</title>
    <link>http://www.insideandroid.fr/post/2009/04/27/Tutorial-%3A-Jouons-avec-les-contacts</link>
    <guid isPermaLink="false">urn:md5:e9c856c8c012b62d2666a0118b618fb9</guid>
    <pubDate>Mon, 27 Apr 2009 16:25:00 +0200</pubDate>
    <dc:creator>Gregory</dc:creator>
        <category>Tutorial</category>
        <category>Contacts</category><category>content provider</category><category>Tutorial</category><category>URI</category>    
    <description>&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
Voir, Modifier, Supprimer des contacts ! En Ajouter des nouveaux ! En
importer dans votre application, en exporter depuis celle-ci... C'est ce que
nous allons voir ici ! Au final on obtiendra quelque chose comme ça :
&lt;img src=&quot;http://www.insideandroid.fr/public/Photos/Tutorial-Contacts/.screen2_s.jpg&quot; alt=&quot;screen2&quot; style=&quot;display:block; margin:0 auto;&quot; title=&quot;screen2, avr 2009&quot; /&gt; Le nom, le numéro,
et la photo de chacun de vos contacts. Pour cette première partie, on
commencera par &amp;quot;LIRE&amp;quot; les contacts.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;ins&gt;ÉTAPE 1&lt;/ins&gt; : Récupérer les informations du
contact...&lt;/strong&gt;&lt;br /&gt;
...Et les afficher !&lt;/p&gt;
&lt;p&gt;On utilisera donc pour cette première étape une simple liste qui affichera
du texte a chaque item. Le nom et numéro de chaque contacts seront stockés dans
une String. Le tableau contenant tout ce petit monde s'appelle donc
contacts :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;private ArrayList&amp;lt;String&amp;gt; contacts;&lt;/li&gt;
&lt;li&gt;setListAdapter(new ArrayAdapter&amp;lt;String&amp;gt;(this,
android.R.layout.simple_list_item_1, contacts));&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lorsqu'on récupérera les contacts, on voudra le nom et le numéro (pour
l'instant). &lt;a href=&quot;http://www.insideandroid.fr/public/Photos/Tutorial-Contacts/screen0.png&quot;&gt;&lt;img src=&quot;http://www.insideandroid.fr/public/Photos/Tutorial-Contacts/.screen0_m.jpg&quot; alt=&quot;code0&quot; style=&quot;display:block; margin:0 auto;&quot; title=&quot;code0, avr 2009&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ContentResolver resolver = this.getContentResolver();&lt;/code&gt; crée une
instance de ce qui permet d'accèder au contenu d'autres application.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Uri uri = Contacts.People.CONTENT_URI;&lt;/code&gt; récupère l'URI où se
trouvent vos contacts (on aurai aussi pu faire un parse de la string
“content://contacts/people/”&lt;/p&gt;
&lt;p&gt;&lt;code&gt;String&lt;a href=&quot;http://www.insideandroid.fr/post/2009/04/27/&quot;&gt;&lt;/a&gt; projection = new String&lt;a href=&quot;http://www.insideandroid.fr/post/2009/04/27/&quot;&gt;&lt;/a&gt;
{People.NAME, People.NUMBER };&lt;/code&gt; est un tableau qui permettra de ne
demander que les informations des colonnes indiquée. Cela permet d'éviter une
requête trop importante.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cursor cur = resolver.query(uri, projection, null, null, null)&lt;/code&gt;;
un Cursor correspond au résultat d'une requête sur base de donnée. Ici on
récupère le résultat d ela requête sur l'uri des contact, avec comme seule
colonnes demandée celles indiquée par projection. Les arguments supplémentaire
placés ici à null permettent de faire l'équivalent des WHERE clause et ORDER BY
des requêtes SQL classiques.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;this.startManagingCursor(cur);&lt;/code&gt; est votre ami. Il s'occupe de
fermer et rouvrir le curseur pour vous en fonction de l'état de votre
Activity.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.insideandroid.fr/public/Photos/Tutorial-Contacts/.screen0shoot_s.jpg&quot; alt=&quot;screen0&quot; style=&quot;display:block; margin:0 auto;&quot; title=&quot;screen0, avr 2009&quot; /&gt;&lt;/p&gt;
&lt;p&gt;On à ici une liste basique, mais somme toute assez peu attrayante. Afin de
pouvoir Afficher plus d'informations, vous devrez peu à peu vous diriger vers
la solution d'utiliser votre propre adapteur, et votre propre layout
générique.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;ins&gt;ÉTAPE 2 :&lt;/ins&gt; Récupérer plus d'information !&lt;/strong&gt; et les
afficher mieux ;)&lt;/p&gt;
&lt;p&gt;On crée donc notre propre layout : contact.xml, et notre propre
adapteur : MyAdapter. On en profite pour créer notre propre classe de
Contact pour y insérer/récupérer les données que l'on veux. Le changement de
code de la classe principal est donc minime. &lt;code&gt;setListAdapter(new
MyAdapter(this, contacts));&lt;/code&gt; remplace la ligne précédante. Et dans notre
fonciton getContacts on change aussi l'ajout dans le tableau par :
&lt;code&gt;contacts.add(new Contact(name, num));&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.insideandroid.fr/public/Photos/Tutorial-Contacts/.screen1shot_s.jpg&quot; alt=&quot;screen1&quot; style=&quot;display:block; margin:0 auto;&quot; title=&quot;screen1, avr 2009&quot; /&gt; Le résultat
est déjà un peu plus sympathique, et vous voyez déjà l'emplacement pour la
prochaine partie : La photo !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;ins&gt;ETAPE 3 :&lt;/ins&gt; La photo&lt;/strong&gt; C'est en réalité d'une
simplicité déconcertante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;D'abord on récupère l'uri du contact concerné.&lt;/li&gt;
&lt;li&gt;Puis on récupère simplement sa photo via : &lt;code&gt;Bitmap img =
People.loadContactPhoto(this, uri, R.drawable.icon, null);&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette fois ci on utilisera l'autre méthode pour composer l'uri :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;String id =
cur.getString(cur.getColumnIndex(Contacts.People._ID));&lt;/code&gt; &lt;code&gt;uri =
Uri.parse(&amp;quot;content://contacts/people/&amp;quot; + id);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Il suffit ensuite d'ajouter cette photo dans votre objet Contact, puis de le
faire afficher dans l'adapter :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.insideandroid.fr/public/Photos/Tutorial-Contacts/.screen2_s.jpg&quot; alt=&quot;screen2&quot; style=&quot;display:block; margin:0 auto;&quot; title=&quot;screen2, avr 2009&quot; /&gt;&lt;/p&gt;
&lt;p&gt;La source complète du code est disponible en pièce jointe&lt;/p&gt;</description>
    
          <enclosure url="http://www.insideandroid.fr/public/Sources/tutoContacts.zip"
      length="9441" type="application/zip" />
    
    
          <comments>http://www.insideandroid.fr/post/2009/04/27/Tutorial-%3A-Jouons-avec-les-contacts#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/04/27/Tutorial-%3A-Jouons-avec-les-contacts#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/397618</wfw:commentRss>
      </item>
    
  <item>
    <title>Market Place Android et France</title>
    <link>http://www.insideandroid.fr/post/2009/04/25/Market-Place-Android-et-France</link>
    <guid isPermaLink="false">urn:md5:32356fe4949067877367abc43884d02d</guid>
    <pubDate>Sat, 25 Apr 2009 01:30:00 +0200</pubDate>
    <dc:creator>dgirard</dc:creator>
            
    <description>    &lt;p&gt;La market place Android permet maintenant de déployer uniquement sur la
France.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_MarketPlaceAndroidetFrance_1471_image_2.png&quot;&gt;
&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;354&quot; alt=&quot;image&quot; src=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_MarketPlaceAndroidetFrance_1471_image_thumb.png&quot; width=&quot;617&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/04/25/Market-Place-Android-et-France#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/04/25/Market-Place-Android-et-France#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/397007</wfw:commentRss>
      </item>
    
  <item>
    <title>ZXing : Comment tester le scan de code QR sur l’émulateur</title>
    <link>http://www.insideandroid.fr/post/2009/04/23/ZXing-%3A-Comment-tester-le-scan-de-code-QR-sur-lemulateur</link>
    <guid isPermaLink="false">urn:md5:21e0205833fd8f45110edb129bc2f5ef</guid>
    <pubDate>Thu, 23 Apr 2009 16:28:00 +0200</pubDate>
    <dc:creator>Florent</dc:creator>
        <category>Tutorial</category>
        <category>Android</category><category>Code QR</category><category>Tutorial</category><category>ZXing</category>    
    <description>    &lt;p&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/scanfileqr.png&quot;&gt;&lt;img src=&quot;http://www.insideandroid.fr/public/./.scanfileqr_s.jpg&quot; alt=&quot;&quot; style=&quot;float: right; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0;&quot; title=&quot;ScanFileActivity, avr 2009&quot; /&gt;&lt;/a&gt;La semaine dernière (&lt;a href=&quot;http://www.insideandroid.fr/post/2009/04/16/Tutorial-%3A-Scanner-et-geacuteneacuterer-des-codes-QR-2D-sur-Android&quot; hreflang=&quot;fr&quot;&gt;Tutorial : Scanner et générer des codes QR (2D) sur Android&lt;/a&gt;),
nous avons vu comment faire appel à l’application Barcode Scanner afin de
décoder un code QR. Barcode Scanner ne propose que l’appareil photo pour la
capture de l’image du code, ce qui le rend inutilisable sur l’émulateur.&lt;/p&gt;
&lt;p&gt;Il est possible en utilisant JMF et une connection TCP/IP émulateur/hôte de
simuler l’appareil photo avec la Webcam (expliqué &lt;a href=&quot;http://www.tomgibara.com/android/camera-source&quot; hreflang=&quot;en&quot;&gt;ici&lt;/a&gt;) mais
cela n’est pas pratique pour nos besoins.&lt;/p&gt;
&lt;p&gt;La solution retenue est de créer une nouvelle activité de scan qui prend en
paramètre une image présente sur la sdcard. Pour ce faire, il vous faudra :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Créer une image de sdcard et la monter dans l’émulateur (expliqué &lt;a href=&quot;http://www.insideandroid.fr/post/2009/04/16/Tutoriel%3A-Comment-utiliser-une-SDCard-sur-l-emulateur-Android&quot; hreflang=&quot;fr&quot;&gt;ici&lt;/a&gt;) ;&lt;/li&gt;
&lt;li&gt;Charger des images de codes QR (format png ou jpeg) sur cette sdcard (voir
lien &lt;a href=&quot;http://www.insideandroid.fr/post/2009/04/16/Tutoriel%3A-Comment-utiliser-une-SDCard-sur-l-emulateur-Android&quot; hreflang=&quot;fr&quot;&gt;précédent&lt;/a&gt;) ;&lt;/li&gt;
&lt;li&gt;Créer une IntentFilter qui aura la même action que l’activité de scan de
ZXing :&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;xml&quot; style=&quot;font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;&quot;&gt;
&lt;ol&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
&amp;lt;activity android:name=&amp;quot;ScanFileActivity&amp;quot;&amp;gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
  &amp;lt;intent-filter&amp;gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
    &amp;lt;action android:name=&amp;quot;com.google.zxing.client.android.SCAN&amp;quot;
/&amp;gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
    &amp;lt;category android:name=&amp;quot;android.intent.category.DEFAULT&amp;quot;
/&amp;gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: bold; vertical-align:top;font-weight: bold; color: #006060;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
  &amp;lt;/intent-filter&amp;gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;font: normal normal 130% 'Courier New', Courier, monospace; color: #003030;&quot;&gt;
&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;&quot;&gt;
&amp;lt;/activity&amp;gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;Ainsi, lorsqu’une Intent avec cette action sera soumise, le système Android
proposera une liste déroulante des applications capables de les traiter.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ensuite il faut créer la classe de l’activité &lt;a href=&quot;http://code.google.com/p/example-zxing/source/browse/trunk/src/fr/insideandroid/ScanFileActivity.java?spec=svn3&amp;amp;r=3&quot;&gt;
ScanFileActivity&lt;/a&gt;. L’écran de cette activité affichera une liste des images
présentes sur la SDCard et lorsque l’une d’entre elles sera choisie, un objet
&lt;a href=&quot;http://code.google.com/p/zxing/source/browse/trunk/core/src/com/google/zxing/qrcode/QRCodeReader.java&quot;&gt;
QRcodeReader&lt;/a&gt; est instancié dans un thread avec les données de l’image
en paramètre. Cette classe de la bibliothèque ZXing prend en paramètre un
objet &lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: -webkit-monospace; white-space: pre; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;&quot;&gt;&lt;span class=&quot;typ&quot; style=&quot;color: rgb(102, 0, 102);&quot;&gt;MonochromeBitmapSource&lt;/span&gt;&lt;/span&gt; adapté à
la classe Bitmap d’Android via la classe &lt;a href=&quot;http://code.google.com/p/zxing/source/browse/trunk/androidtest/src/com/google/zxing/client/androidtest/RGBMonochromeBitmapSource.java&quot;&gt;
RGBMonochromeBitmapSource&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;La classe ScanFileActivity renvoie un résultat en respectant le même format
que CaptureActivity (classe de Barcode Scanner). Du coup, il n’y aucun
changement à faire sur l’activité principale écrite lors du précédent
article.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;Cette nouvelle activité n’étant pas utile sur un vrai téléphone, il faudra
alors commenter sa déclaration dans le fichier AndroidManifest.xml ou l’isoler
dans une application à part.&lt;/div&gt;
&lt;div&gt;En conclusion, ce billet montre une fois de plus la force des Intent dans
la plateforme Android.&lt;/div&gt;
&lt;div&gt;Vous trouverez les sources des fichiers mentionnés dans cet article ici
: &lt;a href=&quot;http://code.google.com/p/zxing/source/checkout&quot;&gt;http://code.google.com/p/zxing/source/checkout&lt;/a&gt;&lt;/div&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/04/23/ZXing-%3A-Comment-tester-le-scan-de-code-QR-sur-lemulateur#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/04/23/ZXing-%3A-Comment-tester-le-scan-de-code-QR-sur-lemulateur#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/396707</wfw:commentRss>
      </item>
    
  <item>
    <title>HiveLayout et Android 3 : La Cellule (et les sources).</title>
    <link>http://www.insideandroid.fr/post/2009/04/22/HiveLayout-et-Android-3-%3A-La-Cellule-et-les-sources</link>
    <guid isPermaLink="false">urn:md5:5becfe76cbf01dd1a71216aac69e1ccd</guid>
    <pubDate>Wed, 22 Apr 2009 17:36:00 +0200</pubDate>
    <dc:creator>Adrien</dc:creator>
        <category>Tutorial</category>
        <category>Android</category><category>Code QR</category><category>Layout</category><category>sources</category><category>Tutorial</category>    
    <description>Après le HiveLayout vu précédemment, il nous manque toujours des HiveCells à
ajouter pour obtenir notre affichage complet. Il s'agit ici de trouver un moyen
efficace de dessiner l'Hexagone et de gérer les clics à l'intérieur de sa zone,
et d'ajouter du contenu à l'intérieur de l'Hexagone. Et surtout, c'est
l'occasion de vous donner des sources d'un projet qui met en œuvre l'aspect
théorique :)&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.insideandroid.fr/public/cells.png&quot;&gt;&lt;img title=&quot;cells.png, avr 2009&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://www.insideandroid.fr/public/cells.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;    &lt;p&gt;Ce billet fait suite à &lt;a href=&quot;http://www.insideandroid.fr/post/2009/04/15/Android-%3A-Creation-d-un-HiveLayout-premiere-etape&quot;&gt;http://www.insideandroid.fr/post/2009/04/15/Android-%3A-Creation-d-un-HiveLayout-premiere-etape&lt;/a&gt;&lt;br /&gt;

&lt;br /&gt;
Nous disposons donc maintenant de notre HiveLayout et d'un système permettant
d'ajouter nos cellules au bon endroit, mais il nous faut encore créer lesdites
cellules.&lt;br /&gt;
&lt;br /&gt;
On va donc étendre une View. Il faut commencer par définir la zone qu'occupera
la cellule en surchargeant la méthode onMeasure.&lt;br /&gt;
On sait que l'hexagone est contenu dans un carré de largeur 2*size et de
hauteur calculée précédemment (2*halfHeight).&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    protected void onMeasure(int widthMeasureSpec, int
heightMeasureSpec) {&lt;br /&gt;
       
setMeasuredDimension(measureWidth(widthMeasureSpec),&lt;br /&gt;
               
measureHeight(heightMeasureSpec));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private int measureWidth(int measureSpec) {&lt;br /&gt;
        return 2 * size;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private int measureHeight(int measureSpec) {&lt;br /&gt;
        int height = 2 * ((int)
Math.sqrt((double) (size * size - (size / 2)&lt;br /&gt;
               
* (size / 2))));&lt;br /&gt;
        return height;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Maintenant que l'on dispose de notre surface de dessin, nous allons créer le
contour en utilisant le Path suivant :&lt;br /&gt;
&lt;br /&gt;
        Path path = new Path();&lt;br /&gt;
        path.moveTo(size / 2, 0);&lt;br /&gt;
        path.lineTo(0, halfHeight);&lt;br /&gt;
        path.lineTo(size / 2, 2 *
halfHeight);&lt;br /&gt;
        path.lineTo(size * 3 / 2, 2 *
halfHeight);&lt;br /&gt;
        path.lineTo(size * 2,
halfHeight);&lt;br /&gt;
        path.lineTo(size * 3 / 2, 0);&lt;br /&gt;
        path.lineTo(size / 2, 0);&lt;br /&gt;
        path.close();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On peut vérifier si le point est bien à l'intérieur de l'hexagone avec la
fonction suivante :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public boolean checkPointInside(float x, float y) {&lt;br /&gt;
        if (y &amp;lt; (-(halfHeight * 2) /
size) * x + halfHeight)&lt;br /&gt;
            return
true;&lt;br /&gt;
        if (y &amp;gt; ((halfHeight * 2) / size)
* x + halfHeight)&lt;br /&gt;
            return
true;&lt;br /&gt;
        if (y &amp;gt; (-(halfHeight * 2) /
size) * x + 5 * halfHeight)&lt;br /&gt;
            return
true;&lt;br /&gt;
        if (y &amp;lt; ((halfHeight * 2) / size)
* x - 3 * halfHeight)&lt;br /&gt;
            return
true;&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Et on dessine la cellule de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
    protected void onDraw(Canvas canvas) {&lt;br /&gt;
        canvas.clipPath(path);&lt;br /&gt;
        canvas.drawColor(0xFFFF0000);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Ce sont les bases nécessaires à l'affichage et l'utilisation optimale de nos
cellules, mais ce n'est qu'une base, il reste beaucoup à faire.&lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce layout, vous pourrez par exemple vouloir associer vos objects
à une cellule, mettre en place un système de configuration xml pour les
cellules, etc...&lt;br /&gt;
&lt;br /&gt;
Les sources d'un exemple sont fournies en pièce jointe, avec thème XML, gestion
du touch sur la cellule et menu pour ajouter des séries de cellules.&lt;/p&gt;</description>
    
          <enclosure url="http://www.insideandroid.fr/public/HiveScroll.zip"
      length="578591" type="application/zip" />
    
    
          <comments>http://www.insideandroid.fr/post/2009/04/22/HiveLayout-et-Android-3-%3A-La-Cellule-et-les-sources#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/04/22/HiveLayout-et-Android-3-%3A-La-Cellule-et-les-sources#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/396431</wfw:commentRss>
      </item>
    
  <item>
    <title>Tutorial : Scanner et générer des codes QR (2D) sur Android</title>
    <link>http://www.insideandroid.fr/post/2009/04/16/Tutorial-%3A-Scanner-et-geacuteneacuterer-des-codes-QR-2D-sur-Android</link>
    <guid isPermaLink="false">urn:md5:218dc2de8da60fdcda97fc80f2f24131</guid>
    <pubDate>Fri, 17 Apr 2009 06:00:00 +0200</pubDate>
    <dc:creator>Florent</dc:creator>
        <category>Tutorial</category>
        <category>Android</category><category>Code QR</category><category>Tutorial</category><category>ZXing</category>    
    <description>&lt;p style=&quot;margin-top: 0;&quot;&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialScanneretgnrerdescodesQRsurAndro_B62E_start_2.png&quot;&gt;
&lt;img title=&quot;start&quot; height=&quot;244&quot; alt=&quot;start&quot; src=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialScanneretgnrerdescodesQRsurAndro_B62E_start_thumb.png&quot; width=&quot;164&quot; align=&quot;left&quot; border=&quot;0&quot; style=&quot;border-right-width: 0; border-right-style: initial; border-right-color: initial; border-top-width: 0; border-top-style: initial; border-top-color: initial; display: inline; margin-left: 0; border-left-width: 0; border-left-style: initial; border-left-color: initial; margin-right: 0; border-bottom-width: 0; border-bottom-style: initial; border-bottom-color: initial;&quot; /&gt;&lt;/a&gt;Vous
avez une idée d’application s’appuyant sur les codes QR ? ZXing vous permettra
de la réaliser (presque) sans effort !&lt;/p&gt;
&lt;p&gt;En effet, l’une des principales forces d’Android est de pouvoir réutiliser
des fonctionnalités déjà implémentées par des applications existantes. Le
principe est de créer des objets Intent qui vont cibler l’application
implémentant la fonction qui nous intéresse, éventuellement de lui passer des
paramètres (méthode «putExtra») et de faire appel à l’activité capable de
répondre à ce besoin en utilisant «startActivityForResult». Cette dernière
renverra une réponse sous forme d’un objet Intent passé en paramètre à
«onActivityResult». Je ne m’étenderai pas plus à ce sujet (plus d’infos
ici: &lt;a href=&quot;http://developer.android.com/guide/topics/fundamentals.html#actcomp&quot;&gt;http://developer.android.com/guide/topics/fundamentals.html#actcomp&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Le projet ZXing (se prononce «Zebra Crossing») est un ensemble de
bibliothèques et d’applications de lecture de code-barres visant un large
spectre de plateformes : Java SE /Java ME, C++, C#, iPhone, Blackberry, … et
bien sûr Android :).&lt;/p&gt;
&lt;p&gt;L’ensemble du projet est à télécharger à cette adresse:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://code.google.com/p/zxing/downloads/list&quot;&gt;http://code.google.com/p/zxing/downloads/list&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Les scripts Ant vous permettront de générer une version optimisée de
l’application :&lt;/p&gt;
&lt;p&gt;Pour cela, vous aurez besoin de Ant (&lt;a href=&quot;http://ant.apache.org&quot;&gt;http://ant.apache.org&lt;/a&gt;) et de Proguard (&lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=54750&amp;amp;package_id=49483&quot;&gt;http://sourceforge.net/project/showfiles.php?group_id=54750&amp;amp;package_id=49483&lt;/a&gt;).
Dézippez l’archive de proguard et copier-collez «lib\proguard.jar» dans
«bin».&lt;/p&gt;
&lt;p&gt;Puis dans le répertoire de ZXing, d’abord dans «core» qui contient les
fonctions de reconnaissance/génération des codes-barres :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ant -f build.xml build-no-debug&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dans «android» :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ant -f build.xml -Dandroid-home&lt;em&gt;=«racine du SDK android»&lt;/em&gt;
-DWTK-home=«&lt;em&gt;racine du répertoire de proguard»&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Lancez l’émulateur («android SDK»\tools\emulator). Et finalement,
installez l’application avec la commande suivante :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ant -f build.xml install -Dandroid-home&lt;em&gt;=«racine du SDK android»&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vous devriez alors trouver une application «Barcode Scanner» dans
l’émulateur.&lt;/p&gt;
&lt;p&gt;Vous ne pourrez malheureusement pas la tester pleinement dans l’émulateur
(Nous vous apprendrons dans un autre billet à utiliser une Webcam depuis
l’émulateur), mais sachez que cette application est capable de partager vos
contacts/favoris via code QR, rechercher des produits grâce à leur code-barre,
etc.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialScanneretgnrerdescodesQRsurAndro_B62E_share_2.png&quot;&gt;
&lt;img title=&quot;share&quot; style=&quot;border-right: 0; border-top: 0; display: block; float: none; margin-left: auto; border-left: 0; margin-right: auto; border-bottom: 0&quot; height=&quot;164&quot; alt=&quot;share&quot; src=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialScanneretgnrerdescodesQRsurAndro_B62E_share_thumb.png&quot; width=&quot;244&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Maintenant créez un nouveau projet Android, changez le layout main.xml:&lt;/p&gt;
&lt;div class=&quot;xml&quot; style=&quot;font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;&quot;&gt;
&lt;ol&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;&amp;lt;LinearLayout
xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    android:orientation=&amp;quot;vertical&amp;quot;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    android:layout_width=&amp;quot;fill_parent&amp;quot;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt;    android:layout_height=&amp;quot;fill_parent&amp;quot;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    &amp;gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;&amp;lt;Button&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    android:id=&amp;quot;@+id/scanButton&amp;quot;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    android:layout_width=&amp;quot;fill_parent&amp;quot;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt;    android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    android:text=&amp;quot;Click to scan&amp;quot;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    /&amp;gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;&amp;lt;/LinearLayout&amp;gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;Et remplacez le code de votre activité par:&lt;/p&gt;
&lt;div class=&quot;java5&quot; style=&quot;font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;&quot;&gt;
&lt;ol&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;private static final int REQUEST_SCAN = 0;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;@Override&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt;public void onCreate(Bundle savedInstanceState) {&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    super.onCreate(savedInstanceState);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    setContentView(R.layout.main);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    Button btScan = (Button)
this.findViewById(R.id.scanButton);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    btScan.setOnClickListener(btScanListener);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt;}&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;private Button.OnClickListener btScanListener = new
Button.OnClickListener() {&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    public void onClick(View v) {&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;        Intent intent = new
Intent(&amp;quot;com.google.zxing.client.android.SCAN&amp;quot;);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt;        intent.putExtra(&amp;quot;SCAN_MODE&amp;quot;,
&amp;quot;QR_CODE_MODE&amp;quot;);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;        try {&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;         
startActivityForResult(intent, REQUEST_SCAN);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt;       } catch (ActivityNotFoundException
e) {&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;         Toast.makeText(Main.this,
&amp;quot;Barcode Scanner ne semple pas être installé&amp;quot;, 2000).show();&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;       }&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    }&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;};&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;public void onActivityResult(int reqCode, int resCode, Intent
intent) {&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    if (REQUEST_SCAN == reqCode) {&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;        if (RESULT_OK == resCode) {&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;            String contents =
intent.getStringExtra(&amp;quot;SCAN_RESULT&amp;quot;);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt;            Toast.makeText(this,
&amp;quot;Succès : &amp;quot; + contents, 2000).show();&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;        } else if (RESULT_CANCELED ==
resCode) {&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;            Toast.makeText(this,
&amp;quot;Scan annulé&amp;quot;, 2000).show();&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;        }&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    }&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt;}&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;Lancez votre projet dans l’émulateur, cliquez sur le bouton, puis à défaut
de pouvoir scanner, appuyez sur le bouton «Back», le message «scan annulé»
devrait alors s’afficher, nous indiquant que «Barcode Scanner» nous a bel et
bien renvoyé un résultat.&lt;/p&gt;
&lt;p&gt;L’aspect visuel n’est certes pas spectaculaire, mais constatez que notre
application n’a aucune dépendance en terme de code vis-à-vis de «Barcode
Scanner», ce qui est topissime !&lt;/p&gt;
&lt;p&gt;Si Barcode Scanner n’est pas présent dans l’émulateur, alors l’exception
ActivityNotFoundException est levée. Une classe IntentIntegrator (&lt;a href=&quot;http://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentIntegrator.java&quot;&gt;http://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentIntegrator.java&lt;/a&gt;)
est à votre disposition pour générer l’Intent de scan qui vous permet de
réduire le code émettant une Intent à:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;IntentIntegrator.initiateScan(Main.this);&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;De plus, cette méthode propose le cas échéant de télécharger Barcode Scanner
depuis la Marketplace Android (ne fonctionne que sur un vrai téléphone).&lt;/p&gt;
&lt;p&gt;Pour générer un code QR, l’Intent à créer est la suivante:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Intent intent = new Intent(&amp;quot;com.google.zxing.client.android.ENCODE&amp;quot;);&lt;br /&gt;
intent.putExtra(&amp;quot;ENCODE_DATA&amp;quot;, “votre message”);&lt;br /&gt;
intent.putExtra(&amp;quot;ENCODE_TYPE&amp;quot;, &amp;quot;TEXT_TYPE&amp;quot;);&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialScanneretgnrerdescodesQRsurAndro_B62E_enc_2.png&quot;&gt;
&lt;img title=&quot;enc&quot; style=&quot;border-right: 0; border-top: 0; display: block; float: none; margin-left: auto; border-left: 0; margin-right: auto; border-bottom: 0&quot; height=&quot;153&quot; alt=&quot;enc&quot; src=&quot;http://www.insideandroid.fr/public/WindowsLiveWriter_TutorialScanneretgnrerdescodesQRsurAndro_B62E_enc_thumb.png&quot; width=&quot;244&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Les types de contenu que vous pouvez encoder sont dans la classe
com.google.zxing.client.android.Contents.Type.&lt;/p&gt;
&lt;p&gt;Vous trouverez les sources complètes de ma démo ici : &lt;a href=&quot;http://code.google.com/p/example-zxing/source/checkout&quot;&gt;http://code.google.com/p/example-zxing/source/checkout&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.insideandroid.fr/post/2009/04/16/Tutorial-%3A-Scanner-et-geacuteneacuterer-des-codes-QR-2D-sur-Android#comment-form</comments>
      <wfw:comment>http://www.insideandroid.fr/post/2009/04/16/Tutorial-%3A-Scanner-et-geacuteneacuterer-des-codes-QR-2D-sur-Android#comment-form</wfw:comment>
      <wfw:commentRss>http://www.insideandroid.fr/feed/atom/comments/394866</wfw:commentRss>
      </item>
    
</channel>
</rss>
