Effectuer un tâche répétitive sous Android
Objectif : Créer une application qui puisse transmettre toutes les secondes une requête au serveur TCP minimal sous Linux.
Un bouton (Button
) appelé DEMARRER
permettra de démarrer l'émission périodique des requêtes et la mise
à jour de l'interface avec la réponse obtenue. Le texte du bouton devient alors ARRETER
.
Il permet alors d'arrêter la communication avec le serveur.
Une zone de texte (TextView
) permettra d'afficher la réponse du serveur.
Cette application utilise la classe ClientTcpMinimal
.
Créez une application Android
Suivez la docucmentation pour créer votre application Android
Ecrire le code de la classe MainActivity
Un handler
permet d'envoyer des objets Runnable
à la la file de messages de l'activité (MessageQueue
). L'objet Runnable
sera exécuté par appel de sa méthode run()
.
Quelques méthodes de la classe Handler
:
post(Runnable r)
: l'objetRunnable r
est démarré immédiatement.postDelayed(Runnable r, long delayMillis)
: l'objetRunnable r
est démarré au bout dedelayMillis
millisecondes.removeCallbacks(Runnable r)
: supprime l'objetRunnable r
en attente d'être démarré dans laMessageQueue
.
public class MainActivity extends AppCompatActivity { private TextView textViewCaractereRecu; private Button boutonDemarrer; private boolean demarre = false; private char requeteChar = 'a'; private Handler mHandler = new Handler(); private Runnable thread = new Runnable() { public void run() { if (demarre) { byte requete; requete = (byte)requeteChar; ClientTcpMinimal clientTcpMinimal = new ClientTcpMinimal(new String("192.168.1.101"), 50000, requete, textViewCaractereRecu); clientTcpMinimal.execute(); requeteChar++; if (requeteChar == 'z') requeteChar = 'a'; mHandler.postDelayed(this, 1000); } } }; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Associer les attributs avec les composants de l'IHM textViewCaractereRecu = (TextView) findViewById(R.id.caractereRecu); boutonDemarrer = (Button) findViewById(R.id.boutonDemarrer); } /** Fonction appelée lorsqu'on clique sur le bouton Emettre */ public void onClickBoutonDemarrer(View view) { if (!demarre) { boutonDemarrer.setText("Arrêter"); demarre = true; mHandler.post(thread); } else { boutonDemarrer.setText("Démarrer"); mHandler.removeCallbacks(thread); demarre = false; } } }
Exécuter l'application
Résultat obtenu :