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

<channel>
	<title>mobile - In Fine - Le Blog</title>
	<atom:link href="https://blog.infine.com/tag/mobile/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.infine.com</link>
	<description>Le blog des technos de demain !</description>
	<lastBuildDate>Tue, 15 Nov 2011 20:55:40 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.7</generator>

<image>
	<url>https://blog.infine.com/wp-content/uploads/2021/03/cropped-vignette-32x32.png</url>
	<title>mobile - In Fine - Le Blog</title>
	<link>https://blog.infine.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Développement d’une application Android</title>
		<link>https://blog.infine.com/developpement-d%e2%80%99une-application-android-1181?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=developpement-d%25e2%2580%2599une-application-android</link>
					<comments>https://blog.infine.com/developpement-d%e2%80%99une-application-android-1181#comments</comments>
		
		<dc:creator><![CDATA[Victor Bonnet]]></dc:creator>
		<pubDate>Tue, 15 Nov 2011 15:30:59 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[mobile]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=1181</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span> Développement d’une application Android</p>
<p>The post <a href="https://blog.infine.com/developpement-d%e2%80%99une-application-android-1181">Développement d’une application Android</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span><p>Cet article a pour but d’expliquer les bases du développement d’une application Android. Il est accompagné d’un exemple que vous pouvez télécharger sur <a href="https://github.com/victorbonnet/SayHello">github</a>.</p>
<h1 style="margin-top: 30px">Préambule</h1>
<p>Pour le développement de  l’exemple qui va suivre nous allons utiliser Eclipse avec le plugin de google (<a href="http://developer.android.com/sdk/eclipse-adt.html">ADT</a>). Ces outils nécessitent bien entendu que vous ayez téléchargé le sdk d’Android que vous pouvez récupérer <a href="http://developer.android.com/sdk/index.html">ici</a>.<br />
Ce tutoriel n’explique pas comment installer ces différents outils étant donné que la documentation de google est déjà très claire pour les anglophiles et que vous pouvez trouver facilement de nombreux tutoriels en français en utilisant votre moteur de recherche préféré.</p>
<p><span id="more-1181"></span></p>
<h1 style="margin-top: 30px">Les composants d’Android</h1>
<p>Pour développer une application Android, il est essentiel de connaître et de comprendre les différents composants que nous propose le framework.<br />
Une application Android ne possède pas de point d’entrée comme une application Java standard, elle se compose de différents composants qui sont lancés lorsque c’est nécessaire.<br />
Il existe 4 types de composants :</p>
<h4 style="margin-left: 40px">Activity</h4>
<p>L’Activity représente une “page” de l’interface visuelle de l’utilisateur. Elle est composée d’objets dérivés de la classe View (boutons, images, zone de texte, &#8230;).<br />
Dans notre exemple nous allons utiliser 2 différentes Activity :</p>
<ul>
<li>Une qui permettra de saisir un nom, composé d’une zone de texte et d’un bouton pour envoyer l’information.</li>
<li>Une seconde qui va simplement afficher du texte (“Bonjour …!”) avec le nom qui sera saisi dans la précedente Activity.</li>
</ul>
<h4 style="margin-left: 40px">Services</h4>
<p>Un service est un programme lancé en tâche de fond. Il ne possède pas d’interface et ne se stoppe pas lorsque l’on change d’application. Il peut être utile pour des applications de musique par exemple : l’utilisateur peut changer d’application sans que la musique ne s&#8217;arrête.</p>
<h4 style="margin-left: 40px">Content providers</h4>
<p>Les content providers permettent de gérer les données d’une application afin de les partager ou non avec d’autres applications. Une application tierce peut par exemple récupérer avec les bonnes permissions les contacts qui sont enregistrés dans le téléphone.</p>
<h4 style="margin-left: 40px">Broadcast Receivers</h4>
<p>Les Broadcast Receivers sont des composants qui permettent de recevoir des messages d&#8217;autres applications. Ils sont en permanence à l’écoute et réagissent en fonction des différents signaux (par exemple ajout d’une notification).</p>
<h1 style="margin-top: 30px">Activation des composants</h1>
<p>Les Activity, Service et Broadcast receivers sont activés par des messages asynchrones appelés <a href="http://developer.android.com/reference/android/content/Intent.html">intents</a>. Ils permettent donc de lancer d’autres composants et d’envoyer les URI des données sur lesquelles le composant peut agir.<br />
Les Content providers sont quant à eux activés lorsqu’ils sont sollicités par un <a href="http://developer.android.com/reference/android/content/ContentResolver.html">Content Resolver</a>.</p>
<h1 style="margin-top: 30px">Le fichier AndroidManifest.xml</h1>
<p>Toutes les applications Android doivent contenir un fichier AndroidManifest.xml. C’est un fichier xml qui doit être placé à la racine du projet, il contient tous les composants qui peuvent être activés dans l’application. Il permet de définir le nom et l&#8217;icône de l’application, la version minimale d’Android pouvant exécuter l’application, de déclarer toutes les permissions nécessaires à l’application : l&#8217;accès à internet, l&#8217;écriture de données sur la carte sd&#8230;</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
      package=&quot;com.infine.sayHello&quot;
      android:versionCode=&quot;1&quot;
      android:versionName=&quot;1.0&quot;&gt;
    &lt;uses-sdk android:minSdkVersion=&quot;6&quot; /&gt;

    &lt;application android:icon=&quot;@drawable/icon&quot; android:label=&quot;@string/app_name&quot;&gt;
        &lt;activity android:name=&quot;.SayHelloActivity&quot;
                  android:label=&quot;@string/app_name&quot;&gt;
            &lt;intent-filter&gt;
                &lt;action android:name=&quot;android.intent.action.MAIN&quot; /&gt;
                &lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&gt;
            &lt;/intent-filter&gt;
        &lt;/activity&gt;

        &lt;activity android:name=&quot;.HelloActivity&quot;
                  android:label=&quot;@string/app_name&quot;&gt;
        &lt;/activity&gt;

    &lt;/application&gt;
&lt;/manifest&gt;
</pre>
<h1 style="margin-top: 30px">Arborescence d’une application</h1>
<p><a href="https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-09-13-à-23.37.25.png"><img fetchpriority="high" decoding="async" class="alignleft size-full wp-image-1209" src="https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-09-13-à-23.37.25.png" alt="Arborescence" width="207" height="369" srcset="https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-09-13-à-23.37.25.png 207w, https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-09-13-à-23.37.25-168x300.png 168w" sizes="(max-width: 207px) 100vw, 207px" /></a></p>
<ul>
<li><strong>src :</strong> ce répertoire contient l’implémentation des différents composants et ainsi que l’ensemble du code Java de l’application.</li>
<li><strong>AndroidManifest.xml :</strong> fichier d’informations de l’application pour le système que l’on a vu précedemment</li>
<li><strong>res :</strong> répertoire contenant les ressources de l’application (images, mise en page, &#8230;)</li>
<li><strong>gen :</strong> Généré par ADT et non modifiable. Il contient les références des ressources présentent dans le répertoire res, afin de pouvoir les utiliser dans le code Java.</li>
</ul>
<h1 style="margin-top: 160px">Exemple d’application SayHello</h1>
<p>Voici l&#8217;explication d&#8217;une application simple appelée SayHello, vous pouvez directement récupérer les sources <a href="https://github.com/victorbonnet/SayHello">ici</a> pour les fans de github.</p>
<p>Commençons par la création du projet : Eclipse &gt; File &gt; New &gt; Other &#8230; &gt; Android Project<br />
<a href="https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-08-12-à-20.18.35.png"><img decoding="async" class="aligncenter size-full wp-image-1216" src="https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-08-12-à-20.18.35.png" alt="Création projet" width="337" height="496" srcset="https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-08-12-à-20.18.35.png 527w, https://blog.infine.com/wp-content/uploads/2011/12/Capture-d’écran-2011-08-12-à-20.18.35-203x300.png 203w" sizes="(max-width: 337px) 100vw, 337px" /></a><br />
SayHelloActivity est la classe générée lors de la création du projet, elle est aussi lancée par défaut lors du lancement de l&#8217;application (intent MAIN dans l&#8217;AndroidManifest.xml).</p>
<pre class="brush: java; title: ; notranslate">
public class SayHelloActivity extends Activity {
    private final String SAY_HELLO = &quot;sayHello&quot;;
    private Context context;
    private EditText editText;
    private Button button;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        context = this;
        editText = (EditText) findViewById(R.id.name);
        button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                if (editText.getText().toString().equals(&quot;&quot;)) {
                    Toast.makeText(context, R.string.error, 1000).show();
                } else {
                    Intent intent = new Intent(context, HelloActivity.class);
                    intent.putExtra(&quot;Name&quot;, editText.getText().toString());
                    context.startActivity(intent);
                }

            }
        });
    }
}
</pre>
<p>Cette classe est liée avec le fichier main.xml (ci-dessous) qui va définir l&#8217;interface de l&#8217;activity. Lorsque l&#8217;utilisateur va cliquer sur le bouton, un contrôle va permettre de vérifier si le champs texte n&#8217;est pas vide et lancer <em>HelloActivity</em> grâce à un intent.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:orientation=&quot;vertical&quot;
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;fill_parent&quot;
    &gt;

	&lt;TextView
		android:id=&quot;@+id/lbl_name&quot;
		android:layout_width=&quot;fill_parent&quot;
		android:layout_height=&quot;wrap_content&quot;
		android:text=&quot;@string/name&quot;
		android:textSize=&quot;28px&quot;
	    /&gt;

	&lt;EditText
		android:id=&quot;@+id/name&quot;
		android:layout_width=&quot;fill_parent&quot;
	    android:layout_height=&quot;wrap_content&quot;
		/&gt;

	&lt;Button
		android:id=&quot;@+id/button&quot;
		android:layout_width=&quot;wrap_content&quot;
	    android:layout_height=&quot;wrap_content&quot;
	    android:text=&quot;@string/send&quot;
		/&gt;

&lt;/LinearLayout&gt;
</pre>
<p><em>HelloActivity</em> va afficher Bonjour, &#8220;utilisateur&#8221; dans les différentes langues qu&#8217;on aura ajoutés. Dans l&#8217;exemple présent sur github, l&#8217;anglais est par défaut et le français est utilisé pour les appareils utilisant ce langage. (values et values-fr dans le dossier res)</p>
<pre class="brush: java; title: ; notranslate">
public class HelloActivity extends Activity {
    private Context context;
    private TextView textView;
    private Button button;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hello);

        context = this;
        textView = (TextView) findViewById(R.id.hello);
        button = (Button) findViewById(R.id.back);

        textView.setText(getResources().getString(R.string.hello) + this.getIntent().getStringExtra(&quot;Name&quot;) + &quot;!&quot;);

        button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                ((Activity) context).finish();
            }
        });
    }
}
</pre>
<p><em>HelloActivity</em> est liée avec le <em>hello.xml</em> ci-dessous. Elle est composée d&#8217;une zone de texte et d&#8217;un bouton qui stop l&#8217;activity, <em>SayHelloActivity</em> repasse donc en premier plan.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:orientation=&quot;vertical&quot;
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;fill_parent&quot;
    &gt;

	&lt;TextView
        android:id=&quot;@+id/hello&quot;
        android:layout_width=&quot;fill_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:textSize=&quot;28px&quot;
	    /&gt;

	&lt;Button
		android:id=&quot;@+id/back&quot;
		android:layout_width=&quot;wrap_content&quot;
	    android:layout_height=&quot;wrap_content&quot;
	    android:text=&quot;@string/back&quot;
		/&gt;
&lt;/LinearLayout&gt;
</pre>
<h1 style="margin-top: 30px">Conclusion</h1>
<p>L’article touche à sa fin, nous avons vu les points fondamentaux pour la création d’applications Android. L’exemple ci-dessus présente seulement un seul des composants d’Android : les “Activity”. Elles sont indispensables pour créer des applications, nous verrons dans de prochains articles comment utiliser les autres composants pour des besoins plus spécifiques.<br />
J’espère avoir été clair et que cet article va permettre aux nouveaux développeurs Android de partir sur de bonnes bases.</p><p>The post <a href="https://blog.infine.com/developpement-d%e2%80%99une-application-android-1181">Développement d’une application Android</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/developpement-d%e2%80%99une-application-android-1181/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
