1/2 Démarrage - UV TL53 UTBM
Transcription
1/2 Démarrage - UV TL53 UTBM
Démarrage: - Allumer le pc et mettre rapidement le DVD - Taper F12 ( écran noir au début avant XP ) pour démarrer sur le DVD et pas le disque dur - Choisir la première ligne = Live ( pas une autre !!! ) On va simuler un ordinateur en utilisant µP et RAM du PC ( mais pas son disque dur ) - Ubuntu 10 démarre: login: uv, mdp: utbm S'il y a des messages d'erreurs, faites supprimer. => On a un PC sous Linux avec les outils pour développer des applications pour Android sans rien installer sur le PC réel. I) Documentation Android de Google En installant le SDK Android, on a aussi installé la documentation Google. - Cliquer sur l'icône du Bureau renvoyant aux documents Google. - Rechercher Activity. - Noter les différentes étapes par lesquelles passera une application ( onCreate, onStart,... ). II) Eclipse et projet Android - lancer eclipse, clic sur icone android => erreur, aller dans window/preference.sdk location, vérifier qu'il y a un chemin ( /usr/local/src/android-sdk... ), OK - Créer un composant virtuel: voir cours - Faire un projet: voir cours - Modifier la chaine qui s'affiche dans strings.xml III) Outils de Debug Pour étudier en pratique l'évolution de l'application entre les différentes méthodes, on va utiliser des outils de débuggage = Message de Log. Programme JAVA - Modifier votre projet en ajoutant au programme JAVA, ajouter - import android.util.Log; dans les import - Ajouter une chaine de caractères identifiant les messages en début de la classe ( ligne après class{ ) private static final String TAG= “Test Etats”; - Ajouter les méthodes non présentes trouvée dans la doc pour le cycle de vie en y incluant un message de Log: @Override protected void onStart(){ super.onStart(); Log.e(TAG, "passage onStart"); Utilisation - Ouvrir la fenêtre LogCat de l'onglet DDMS. - Faire Run et observer par quelles étapes on passe. - "Jouer" avec l'application en appuyant sur la touche HOME, en revenant à l'application,... ( CTRL+F11 et CTRL+F12 change l'orientation de l'émulateur, http://developer.android.com/guide/developing/tools/emulator.html ) - Fermer l'application. IV) Gestion de l'interface graphique Le programme appelle un fichier xml et affiche son contenu. ( par défaut main.xml dans res/layout ) On utilise l'outil DroidDraw. - Ajouter une icône à votre application (voir cours ). - Créer une interface RelativeLayout avec 2 boutons et un EditText. - Modifier le main.xml. Vérifier en démarrant l'application que l'on obtient l'interface voulue. - Modifier la taille d'écran de l'appareil émulé ( icone pour créer le composant, edit sur le composant,...), vérifier que l'interface est encore correcte. V) Ecouteur d'événements - Utiliser les 2 boutons pour que le clic sur le premier affiche un message dans l'EditText, le clic sur le second affiche un autre message => Créer les écouteurs, dans onClick, selon l'identité du bouton cliqué, afficher un message. VI) Utilisation de modules internes: GPS - Faites un programme utilisant le GPS: Voir cours - Simuler le GPS: Voir cours ( essayer les 2 méthodes: Telnet et DDMS) Si vous utiliser un téléphone, il faut sortir du bâtiment pour faire le test !: VII) Gestion de plusieurs Threads Android interdit de quitter l'UI thread plus de quelques secondes ( boucle de réception en scrutation, téléchargement,... ). 1/2 Mise en évidence du problème On va utiliser un chrono dans l'UI principale et faire en même un traitement long. - Enlever les définitions d'écouteur et la méthode onClick, on va utiliser une association plus simple par le main.xml. - Ajouter dans la définition du bouton 1 dans main.xml android:text="Chrono" android:onClick="DemarreChrono" - Ajouter dans la définition du bouton 2 dans main.xml android:text="Traitement" android:onClick="Traitement" - Ajouter le chronomètre au main.xml <Chronometer android:id="@+id/chrono" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:textSize="30dip" /> - Ajouter la méthode Traitement qui simule un téléchargement de 20s public void Traitement(View target) { // il faut un view qui sert pas ! sinon erreur avec onclic du main.xml try { Thread.sleep(20000); } catch(Exception e) { Log.e(TAG, "problème"); } } - Ajouter la gestion du chronomètre - dans onCreate: ((Chronometer)findViewById(R.id.chrono)).setOnChronometerTickListener(this); - à la fin de la ligne définissant la classe implements OnChronometerTickListener { - ajouter la méthode de gestion du chrono @Override public void onChronometerTick(Chronometer chr) { long TpsEcoule = SystemClock.elapsedRealtime() - chr.getBase(); int min = (int)(TpsEcoule/60000); int sec = (int) ((TpsEcoule/1000) % 60); String time = min<10? "0" + min : String.valueOf(min); time += ":"; time += sec<10? "0" + sec : String.valueOf(sec); ((Chronometer)findViewById(R.id.chrono)).setText(time); } - ajouter le démarrage du chrono public void DemarreChrono(View target) { ((Chronometer) findViewById(R.id.chrono)).setBase(SystemClock.elapsedRealtime()); ((Chronometer) findViewById(R.id.chrono)).start(); } - Démarrer le chrono en cliquant sur bouton dédié à cela. Après 5s, démarrer le traitement en cliquant sur son bouton Que se passe-t-il avec le temps affiché ? Que se passe-t-il si on appuie à nouveau sur le bouton du chrono ? Solution: Nouveau Thread - Créer un nouveau Thread pour faire ce traitement => Le système gère les accès aux 2 traitements. voir cours. Placer un message log avant et après traitement ( pas de toast hors ui thread, sinon handler ou runOnUIThread ) Exemple avec runOnUIThread ( penser au "import android.widget.Toast;" ). try{ Log.e(TAG, "début traitement "); Thread.sleep(20000); // appel de la méthode des traitements Log.e(TAG, "fin Traitement"); runOnUiThread(new Runnable() { public void run() { Toast toast = Toast.makeText(getApplicationContext(), "fin traitement", Toast.LENGTH_SHORT); toast.show(); } }); } catch(Exception e) { Log.e(TAG, "problème"); } - Recommencer les tests précédents. - Observer les threads avec DDMS ( se placer sur votre processus dans Devices, cliquer sur ). 2/2