Io-Trucks  0.2
BTS SNIR LaSalle Avignon 2020
MainActivity.java
Aller à la documentation de ce fichier.
1 package com.lasalle.io_trucks;
2 
3 import androidx.appcompat.app.AlertDialog;
4 import androidx.appcompat.app.AppCompatActivity;
5 
6 import android.bluetooth.BluetoothAdapter;
7 import android.bluetooth.BluetoothDevice;
8 import android.content.DialogInterface;
9 import android.content.IntentFilter;
10 import android.os.Bundle;
11 import android.os.Handler;
12 import android.os.Message;
13 import android.util.Log;
14 import android.view.View;
15 import android.widget.Button;
16 import android.widget.EditText;
17 import android.widget.ImageButton;
18 import android.widget.ImageView;
19 import android.widget.TextView;
20 
32 public class MainActivity extends AppCompatActivity implements View.OnClickListener
33 {
37  private static final String TAG = "IHMMainActivity";
41  private Boolean etatTriangle = false;
42  private Boolean etatGyrophare = false;
43  private Boolean etatEclairage = false;
44  private Button buttonBluetooth;
45  private Button buttonRechercher;
46  private Button buttonRafraichir;
47  private ImageButton imageButtonTriangle;
48  private ImageButton imageButtonGyrophare;
49  private ImageButton imageButtonEclairage;
52  private ImageView imageEtatConnection;
53  private TextView textEtatConnection;
54  private EditText editNomPeripherique;
55 
60  @Override
61  protected void onCreate(Bundle savedInstanceState)
62  {
63  super.onCreate(savedInstanceState);
64  setContentView(R.layout.activity_main);
65  Log.i(TAG,"onCreate()");
66 
69 
70  communicationBluetooth.demanderActivationBluetooth(this);
71  }
72 
76  @Override
77  protected void onStart()
78  {
79  super.onStart();
80  Log.i(TAG,"onStart()");
81  }
82 
86  @Override
87  protected void onResume()
88  {
89  super.onResume();
90  Log.i(TAG,"onResume()");
92  }
93 
97  @Override
98  protected void onPause()
99  {
100  super.onPause();
101  Log.i(TAG,"onPause()");
102  communicationBluetooth.unregisterBluetooth(this);
103  }
104 
108  @Override
109  protected void onStop()
110  {
111  super.onStop();
112  Log.i(TAG,"onStop()");
113 
114  }
115 
119  @Override
120  protected void onDestroy()
121  {
122  super.onDestroy();
123  Log.i(TAG,"onDestroy()");
124 
125  }
126 
132  @Override
133  public void onClick(View element)
134  {
135  if(element == buttonBluetooth)
136  {
137  if(buttonBluetooth.getText().equals("Connecter"))
138  {
139  BluetoothDevice blueDevice = communicationBluetooth.recupererAppareilBluetooth(editNomPeripherique.getText().toString());
140  if(blueDevice == null)
141  {
142  AlertDialog.Builder boiteAvertissementNonTrouver = new AlertDialog.Builder(this);
143  boiteAvertissementNonTrouver.setMessage("L'appareil io-trucks n'as pas été trouvé. Vérifiez si celui a été appairé correctement.");
144  boiteAvertissementNonTrouver.setPositiveButton("Continuer", new DialogInterface.OnClickListener() {
145  @Override
146  public void onClick(DialogInterface dialog, int which) {
147  }
148  });
149  boiteAvertissementNonTrouver.show();
150  Log.i(TAG, "Appareil io-trucks non trouvé !");
151  return;
152  }
153  else
154  {
155  if(peripheriqueBluetooth == null)
156  {
157  Log.i(TAG, "Instancie peripheriqueBluetooth");
158  peripheriqueBluetooth = new Peripherique(blueDevice, handler);
159  }
160  if(!peripheriqueBluetooth.estConnecte())
161  {
162  Log.i(TAG, "Connexion peripheriqueBluetooth");
163  peripheriqueBluetooth.connecter();
164  }
165  else // déjà connecté !
166  {
167  }
168  }
169  }
170  else if(buttonBluetooth.getText().equals("Déconnecter"))
171  {
172  if (peripheriqueBluetooth.estConnecte())
173  {
174  peripheriqueBluetooth.deconnecter();
175  }
176  }
177  }
178  else if(element == buttonRechercher)
179  {
180  communicationBluetooth.rechercherAppareilConnu(this);
181  }
182  else if(element == imageButtonTriangle)
183  {
184  Log.i(TAG,"button Triangle");
185  if(!etatTriangle)
186  {
187  envoyerTrame("$iotruck;T;1\r\n");
188  imageButtonTriangle.setImageResource(R.drawable.triangle);
189  etatTriangle = true;
190  }
191  else
192  {
193  envoyerTrame("$iotruck;T;0\r\n");
194  imageButtonTriangle.setImageResource(R.drawable.triangle_b_w);
195  etatTriangle = false;
196  }
197  }
198  else if(element == imageButtonGyrophare)
199  {
200  Log.i(TAG,"button Gyrophare");
201  if(!etatGyrophare)
202  {
203  envoyerTrame("$iotruck;G;1\r\n");
204  imageButtonGyrophare.setImageResource(R.drawable.flash);
205  etatGyrophare = true;
206  }
207  else
208  {
209  envoyerTrame("$iotruck;G;0\r\n");
210  imageButtonGyrophare.setImageResource(R.drawable.flash_b_w);
211  etatGyrophare = false;
212  }
213  }
214  else if(element == imageButtonEclairage)
215  {
216  Log.i(TAG,"button Eclairage");
217  if(!etatEclairage)
218  {
219  envoyerTrame("$iotruck;E;1\r\n");
220  imageButtonEclairage.setImageResource(R.drawable.spotlight);
221  etatEclairage = true;
222  }
223  else
224  {
225  envoyerTrame("$iotruck;E;0\r\n");
226  imageButtonEclairage.setImageResource(R.drawable.spotlight_b_w);
227  etatEclairage = false;
228  }
229  }
230  else if(element == buttonRafraichir)
231  {
232  Log.i(TAG,"button Rafraichir");
233  demanderEtats();
234  }
235  else
236  {
237  Log.i(TAG,"button Inconnu : " + element.getId());
238  }
239  }
240 
244  private void envoyerTrame(String trame)
245  {
246  if(peripheriqueBluetooth != null)
247  {
248  if (peripheriqueBluetooth.estConnecte())
249  {
250  Log.i(TAG, "envoyerTrame() trame : " + trame);
251  peripheriqueBluetooth.envoyer(trame);
252  }
253  }
254  }
255 
259  private void recupererWidgets()
260  {
261  buttonBluetooth = findViewById(R.id.buttonConnecter);
262  buttonRechercher = findViewById(R.id.buttonBounded);
263  buttonRafraichir = findViewById(R.id.buttonRafraichir);
264  imageButtonTriangle = findViewById(R.id.imageButtonTriangle);
265  imageButtonGyrophare = findViewById(R.id.imageButtonGyrophares);
266  imageButtonEclairage = findViewById(R.id.imageButtonEclairage);
267  imageEtatConnection = findViewById(R.id.imageViewEtatConnection);
268  textEtatConnection = findViewById(R.id.textViewEtatConnection);
269  editNomPeripherique = findViewById(R.id.editNomPeripherique);;
270  }
271 
275  private void initialiserWidgets()
276  {
277  renitialiserVue();
278 
279  buttonBluetooth.setOnClickListener(this);
280  buttonRechercher.setOnClickListener(this);
281  buttonRafraichir.setOnClickListener(this);
282  imageButtonTriangle.setOnClickListener(this);
283  imageButtonGyrophare.setOnClickListener(this);
284  imageButtonEclairage.setOnClickListener(this);
285  }
286 
291  {
292  IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
293  registerReceiver(communicationBluetooth.ecouterEtatBluetooth(), filter);
294  }
295 
296  private void activerVue()
297  {
298  buttonBluetooth.setText("Déconnecter");
299  buttonRafraichir.setEnabled(true);
300  imageButtonTriangle.setEnabled(true);
301  imageButtonGyrophare.setEnabled(true);
302  imageButtonEclairage.setEnabled(true);
303  imageEtatConnection.setImageResource(R.drawable.green_cricle);
304  textEtatConnection.setText("Connecté");
305  }
306 
310  private void renitialiserVue()
311  {
312  buttonBluetooth.setText("Connecter");
313  buttonRafraichir.setEnabled(false);
314  imageButtonTriangle.setEnabled(false);
315  imageButtonGyrophare.setEnabled(false);
316  imageButtonEclairage.setEnabled(false);
317  imageButtonTriangle.setImageResource(R.drawable.triangle_b_w);
318  imageButtonEclairage.setImageResource(R.drawable.spotlight_b_w);
319  imageButtonGyrophare.setImageResource(R.drawable.flash_b_w);
320  imageEtatConnection.setImageResource(R.drawable.red_circle);
321  textEtatConnection.setText("Déconnecté");
322  }
323 
328  private void decoderTrame(String trame)
329  {
330  String nouvelleTrame = "";
331  // Exemple : trame = "$iotruck;S1;0;0;0\r\n"
332  nouvelleTrame = trame.replace(Protocole.EN_TETE,""); // enlever aussi le ; ?
333  // Exemple : nouvelleTrame = ";S1;0;0;0\r\n"
334  nouvelleTrame.replace(Protocole.DELIMITEUR_FIN,"");
335  // Exemple : nouvelleTrame = ";S1;0;0;0"
336  String[] trameCouper = nouvelleTrame.split(Protocole.DELIMITEUR_CHAMP);
337  // Exemple : trameCouper = [0];[1];[2];[3];[4]
338  Log.v(TAG, "decoderTrame() découpage de la trame");
339  // le premier champ est vide
340  for(int i = 1; i < trameCouper.length; i++)
341  {
342  Log.v(TAG, "decoderTrame() champ " + i + " = " + trameCouper[i]);
343  }
344  traiterTrame(trameCouper);
345  }
346 
351  private void traiterTrame(String[] trame)
352  {
353  Log.v(TAG, "traiterTrame() trame[1] = " + trame[1] + " (type)");
354  if(trame[1].equals(Protocole.TRAME_REQUETE_STATE1))
355  {
356  afficherEtatS1(trame);
357  }
361  }
362 
363  private void afficherEtatS1(String[] trame)
364  {
365  Log.v(TAG, "traiterTrame() trame[2] = " + trame[2] + " (triangle)");
366  if(trame[2].equals(Protocole.LEVE))
367  {
368  imageButtonTriangle.setImageResource(R.drawable.triangle);
369  etatTriangle = true;
370  }
371  else
372  {
373  imageButtonTriangle.setImageResource(R.drawable.triangle_b_w);
374  etatTriangle = false;
375  }
376 
377  Log.v(TAG, "traiterTrame() trame[3] = " + trame[3] + " (gyrophare)");
378  if(trame[3].equals(Protocole.ON))
379  {
380  imageButtonGyrophare.setImageResource(R.drawable.flash);
381  etatGyrophare = true;
382  }
383  else
384  {
385  imageButtonGyrophare.setImageResource(R.drawable.flash_b_w);
386  etatGyrophare = false;
387  }
388 
389  Log.v(TAG, "traiterTrame() trame[4] = " + trame[4] + " (éclairage)");
390  if(trame[4].equals(Protocole.ON))
391  {
392  imageButtonEclairage.setImageResource(R.drawable.spotlight);
393  etatEclairage = true;
394  }
395  else
396  {
397  imageButtonEclairage.setImageResource(R.drawable.spotlight_b_w);
398  etatEclairage = false;
399  }
400  }
401 
406  final private Handler handler = new Handler()
407  {
408  @Override
409  public void handleMessage(Message msg)
410  {
411  super.handleMessage(msg);
412 
413  switch(msg.what)
414  {
416  Log.v(TAG, "handleMessage() io-trucks connecté");
417  activerVue();
418  demanderEtats();
419  break;
421  Log.v(TAG, "handleMessage() io-trucks réception : " + (String)msg.obj);
422  decoderTrame((String)msg.obj);
423  break;
425  Log.v(TAG, "handleMessage() io-trucks émission : " + (String)msg.obj);
429  break;
431  Log.v(TAG, "handleMessage() io-trucks déconnecté");
432  renitialiserVue();
433  break;
434  }
435  }
436  };
437 
441  private void demanderEtats()
442  {
443  envoyerTrame("$iotruck;S1\r\n");
444  envoyerTrame("$iotruck;S2\r\n");
445  }
446 }
void afficherEtatS1(String[] trame)
boolean deconnecter()
Méthode perméttant de se déconnecter du périphérique.
void rechercherAppareilConnu(Context contextAcceuil)
Méthode de recherche des appareils qui ont déjà était appairer.
final Handler handler
Handler de l&#39;application et des périphériques bluetooth Cette handler permet de gérer le thread de co...
static final String DELIMITEUR_CHAMP
Definition: Protocole.java:9
static final String DELIMITEUR_FIN
Definition: Protocole.java:10
void onClick(View element)
Méthode de gestion des clics Ceci est la méthode qui gère l&#39;écoute des clics sur les différents widge...
static final String EN_TETE
Definition: Protocole.java:8
void onStart()
Méthode appelée au démarrage après le onCreate() ou un restart après un onStop()
void initialiserWidgets()
Méthode pour initialiser les Widgets.
void onPause()
Méthode appelée après qu&#39;une boîte de dialogue s&#39;est affichée (on reprend sur un onResume()) ou avant...
void traiterTrame(String[] trame)
Méthode permettant de traiter les trames en fonctions de leurs contennue.
void onStop()
Méthode appelée lorsque l&#39;activité n&#39;est plus visible.
void envoyer(final String data)
Méthode perméttant d&#39;envoyer une trame à l&#39;aide du Thread.
BroadcastReceiver ecouterEtatBluetooth()
Vérifie les modification d&#39;état du bluetooth.
boolean estConnecte()
Méthode perméttant de savoir si on est connecter.
void onResume()
Méthode appelée après onStart() ou après onPause()
void connecter()
Méthode perméttant de se connecter à un périphérique.
static final String LEVE
Definition: Protocole.java:27
void onDestroy()
Méthode appelée à la destruction de l&#39;application (après onStop() et détruite par le système Android)...
BluetoothDevice recupererAppareilBluetooth(String nomAppareil)
Méthode qui retourne l&#39;appareil Bluetooth io-trucks.
Classe permettant de gérer les périphériques.
Classe de Communication et de connexion bluetooth.
static final String ON
Definition: Protocole.java:19
void unregisterBluetooth(Context contextAcceuil)
Méthode pour unregister les receiver à la destruction de l&#39;application.
void creerLiasonReceiverEtatBluetooth()
Méthode pour créer les Registers de l&#39;état du bluetooth et donc le lien avec l&#39;état du bluetooth...
static final String TRAME_REQUETE_STATE1
Definition: Protocole.java:25
void onCreate(Bundle savedInstanceState)
Méthode appelée à la création de l&#39;activité MainActivity.
void decoderTrame(String trame)
Méthode perméttant de décoder les trames reçues.
void recupererWidgets()
Méthode pour associer la vue à l&#39;objet des Widgets.
void demanderActivationBluetooth(Context contextAcceuil)
Vérifie si le bluetooth est disponible et activé, sinon demande l&#39;autorisation de l&#39;activé ...
void renitialiserVue()
Méthode permettant de rénitialiser la vue de l&#39;activitée.
void envoyerTrame(String trame)
Méthode qui envoie une trame au périphérique Bluetooth.