Site personnel de Thibault Koprowski

Tutoriels Android

VillainROM_Logo

Rooter son HTC Hero 2.1 vers Froyo custom vilain-Rom

1 year ago by Thibault in (3 comments)

Bonjour à tous !

Je viens juste de rooter mon téléphone et je tiens à vous faire partager le tutoriel que je viens de suivre car beaucoup ne fonctionnaient pas.
Pour suivre ce tutoriel, votre GooglePhone doit être en 2.1 officielle. Le mobile sur lequel j’ai appliqué une à une les étapes décrites dans le tuto était un HTC Hero. Cela a marché pour moi cependant je ne garantie en aucun cas que cela marchera pour vous.

Vous êtes seul garant des dégradations que peut comporter un flashage de votre mobile.

Voici le site en question: http://www.android-software.fr/tuto-rooter-la-rom-officielle-htc-hero-2-1

Ci-dessous un screenshot du téléphone après le rootage et installation de FroydVillain (que vous pouvez télécharger à cette adresse:

Villain rom Froyo 2.2Comme vous pouvez le voir, il n’y a plus HTC Sense et pourtant le téléphone est beaucoup plus réactif, beaucoup plus fluide. Je ne regrette vraiment pas la 2.1 !!!

Tutoriel Android: Construire son splashScreen

1 year ago by Thibault in (6 comments)

Un splash screen peut être très utile. Il permet de rendre votre application plus professionnel si celui ci est assez design.Cela vous permet aussi de charger votre interface. D’autant plus si vous avez besoin de télécharger des fichiers via la 3G avec les problèmes de débits que cela suppose.

Notre classe implémente Runnable, ce qui nous permet d’implémenter la fonction run(). En gros on pourra lancer un thread avec this en paramètre. Ce thread effectuera les opération de préparation de l’interface.Par exemple, télécharger des données via la 3G pour replir un adapter).

Puis notre fonction handleMessage() terminera les opérations sur l’interface: pour nous, ce sera cacher l’ImageView du splashscreen mais cela aurait pu être initialiser un adapter avec les données précédemment chargées.

public class splashScreen extends Activity implements Runnable{

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // On lance le thread
        launchWait();
    }

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {

        // On cache l'image
            ((ImageView)findViewById(R.id.img_splash))
                .setVisibility(ImageView.INVISIBLE);
        }
    }

    private void launchWait(){
        // On lance le thread
        Thread t = new Thread(this);
        t.start();
    }

    @Override
    public void run() {
        /*
           C'est ici qu'on effectue les différentes opérations
          pouvant geler l'interface
          graphique si elles avaient été faites dans la méthode
          onCreate().
        */

/*
On envoi un signal à notre handler ce qui exécutera la fonction handleMessage.
Le paramètre (ici 0) est un identifiant qui peut être testé dans les fonction handlerMessage.
Nous aurions pu tout aussi bien utilisé plusieurs fois notre handler. Dans ce cas il aurait mieux valu utiliser des ID en constante.
*/
        handler.sendEmptyMessage(0);
    }

}

Ici, dans le layout XML, l’ImageView du splash est deja visible. On ne fais donc que la cacher une fois toutes nos opérations finies.

Voilà ! A bientôt !

PS: N’hésitez surtout pas à poster vos questions !

Tutoriel Android n° 4: Effectuer des requêtes HTTP

1 year ago by Thibault in (18 comments)

Dans la suite des mes tutoriels je vais désormais plus expliquer des techniques ou astuces que j’utilise au quotidien lors de mes projets. Cependant si vous désirez un tutoriel sur un thème bien précis, n’hésitez pas à me contacter pour me demander.

Je vais donc vous expliquer comment effectuer une requête http vers un serveur puis récupérer un résultat.

Pour cela nous allons utiliser le code suivant:

public void postData() {
    // On créé un client http
    HttpClient httpclient = new DefaultHttpClient();
    // On créé notre entête
    HttpPost httppost = new HttpPost("http://www.tonsite.com/script.php");

    try {
        // On ajoute nos données dans une liste
        List nameValuePairs = new ArrayList(2);

        // On ajoute nos valeurs ici un identifiant et un message
        nameValuePairs.add(new BasicNameValuePair("id", "567"));
        nameValuePairs.add(new BasicNameValuePair("message", "Android c'est coo!!!"));

        // Ajoute la liste à notre entête
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // On exécute la requête tout en récupérant la réponse
        HttpResponse response = httpclient.execute(httppost);

        // On peut maintenant afficher la réponse
        Log.e("http réponse",response.toString());

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }
}

Et voila vous pouvez donc maintenant récupérer les valeurs dans votre script PHP avec le code suivant:

<?php
    echo("id: ".$_POST['id']." data: ".$_POST['data']);
?>

J’espère que cela vous sera utile! ;)

capture_nouveau_projet_android

Tutoriel Android n° 3: Le fameux Hello world !

1 year ago by Thibault in (1 comment)

Passons aux choses sérieuses ! :D

Commençons par créer un nouveau projet Android dans Eclipse:

File -> new -> Android project ou sur l’icône surlignée ci-dessous

Vous obtenez cet écran:

Ensuite remplissez les champs comme ceci:

  • Project name: HelloAndroid
  • Application name: Hello, Android
  • Package name: com.exemple.helloAndroid (ou votre propre namespace)
  • Create Activity: HelloAndroid
  • Min SDK Version: 3
  • Cliquez sur Finish.

Voici en détail ce que sont ces données:

Project Name
C’est le nom du projet dans Eclipse mais aussi le nom du dossier où seront contenus les fichiers du projet.
Application Name
C’est le nom de l’application qui apparaîtra dans le téléphone.
Package Name
C’est le nom du package principal (Selon les même règles que les packages en java). Cela vous permet d’organiser les classes de votre projet. Ce package sera celui où se trouvera l’activité par défaut.
Create Activity
C’est le nom de l’activité par défaut qui sera générée par le plugin.
Cela sera une sous-classe de Activity. Nous reviendrons un peu plus tard sur les activités.
Min SDK Version
Cette valeur spécifie la version minimale d’Android que devra avoir le téléphone pour exécuter l’application.

Voilà vous avez créé votre premier projet Android :D !

Nous allons maintenant parler de la hiérarchie des fichiers d’un projet Android.

Nous avons cette hiérarchie:

Nous allons détailler un peu tout ça:

src: ce dossier contient toutes les classes du projet. Ainsi on y retrouvera tous les packages et fichiers .java. Nous y trouvons aussi le fichier HelloAndroid.java qui n’est autre que notre activité par défaut qui sera lancée au démarrage de l’application.

gen: Ce dossier contient le fichier R.java. Ce fichier renferme des données qui seront chargées sur le mobile lors de la compilation de votre projet. Les données incluses dans ce dossier sont par exemple, des fichiers texte décrivant la licence de votre application, des fichiers audio ou vidéo, etc.

res: Ce dossier regroupe l’ensemble des fichiers ressources du projet. C’est ce dossier qui est utilisé par ADT pour créer le fichier R.java. Ce dossier contient lui même des sous dossiers regroupant les fichier ressource par type.
Ces dossiers sont:

  • drawable : regroupera l’ensemble de vos images (png, jpg, gif).
  • layout : Android permet de définir les interfaces dans des fichiers XML. (Comme en .net avec le XAML). Nous verrons ceci un peu plus loin. Ce dossier contient donc l’ensemble des fichiers xml décrivant les interfaces.
  • values : ce dossier contient également un ensemble de fichiers xml stockant les valeurs utilisées par votre application.
    On peut, par exemple, y mémoriser des chaines de caractères (strings.xml), des tableaux (arrays.xml), des couleurs, des dimensions, etc…

Pour finir, tout projet Android contient un fichier nommé AndroidManifest.xml qui définit la configuration de votre application au système Android. Ce fichier définit par exemple, le nom, l’icone (par défaut drawable/icon.png), la version minimale du système nécessaire à l’exécution de l’application, les activités, les services, etc. de votre application.

Passons maintenant à notre classe HelloAndroid.java:

package com.exemple.helloAndroid;

import android.app.Activity;
import android.os.Bundle;

public class HelloAndroid extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

Celle-ci définit une activité. Une activité correspond à un écran. Si une application se compose de plusieurs écrans, elle a une activité pour chaque écran. Chaque activité est une classe qui étend la classe de base Activity. Elle dispose d’une interface utilisateur graphique faite de vues (views) et elle répond à des évènements (events). Quand on change d’écran, on lance une nouvelle activité. Celle-ci peut retourner une valeur. Par exemple, si une activité permet de choisir quelque chose, un texte, une image, elle retourne ce qu’elle a choisi.

Nous allons la modifier pour pouvoir afficher notre petit message:

Commençons par modifier le fichier layout situé dans res -> layout -> main.xml:

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

Ensuite on passe à la classe HelloAndroid:

package com.exemple.helloAndroid;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
                // Nous alllons chercher notre composant Textview via son ID puis nous lui
                // fixons le texte
		((TextView)findViewById(R.id.tv_message)).setText("Hello World !");
                // Nous aurions pu faire ainsi en stockant la référence du composant:
                /*
                TextView tv = (TextView)findViewById(R.id.tv_message);
                tv.setText("Hello World !");
                */
	}
}

Et voilà nous avons notre message.

Mais ceci est trop courant ;) . Nous allons ainsi rajouter une image à ce texte.

Voici le nouveau main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>

    <ImageView
        android:src="@drawable/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
    />

    <TextView
        android:id="@+id/tv_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:layout_gravity="center"
    />

</LinearLayout>

Et voilà ! C’est quand même plus joli avec des couleurs ! :D

Nous allons maintenant afficher le texte suite à un click sur un bouton.

Voici le nouveau code:

Le ficher layout:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>

    <ImageView
        android:src="@drawable/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
    />
    <TextView
        android:id="@+id/tv_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:layout_gravity="center"
    />
    <Button
        android:id="@+id/bt_afficher_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Afficher le message"
        android:layout_gravity="center"
    />

</LinearLayout>

La nouvelle classe:

package com.exemple.helloAndroid;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class HelloAndroid extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState); 
            setContentView(R.layout.main);
            // On associe l'évènement au bouton
            (findViewById(R.id.bt_afficher_message)).setOnClickListener(bt_click);
	}

	// On créé un évènement
	public Button.OnClickListener bt_click = new Button.OnClickListener(){

		@Override
		public void onClick(View v) {
			((TextView)findViewById(R.id.tv_message)).setText("Hello World !");
		}

	};
}

A bientôt dans un prochain tutoriel ! ;)

Go to Top