Programmation Android avec AndroidStudio


Cliquez ici pour retirer la feuille de style si vous souhaitez imprimer ce document (ou en cas de problème d'affichage).

Nous allons développer deux applications qui s'échangent des données par le bluetooth.

Le bluetooth est un standard de communication sans fils à faible consommation d'énergie disponnible sur la plupart des téléphones et device android. Nous n'allons pas étudier ici le fonctionnement détaillé des protocole bluetooth, mais simplement voir au travers d'une application simple comment utiliser les services de l'OS associés à cette technologie.

Prerequis

Socket

Un concept fondamental en réseau est le concept de Socket. Une socket désigne en fait une adresse (qui dépend du protocole utilisé) qui permet d'identifier une machine, plus un numéro de port, qui identifie au sein d'une machine une application.

En java "classique", il existe deux classes (et leurs sous classes) pour représenter une socket : Socket qui représente une socket coté client, et ServerSocket qui représente une socket coté serveur. La classe ServerSocket sert donc à instancier une Socket d'écoute, c'est à dire d'attente. On créé la ServerSocket, puis on invoque dessus la méthode accept() qui va provoquer l'attente d'une connexion. Si un client se connecte, la méthode est débloqué et elle renvoie une Socket, qu'on nomme socket de service, et qui va permettre la communication.

Coté client, c'est beaucoup plus simple : on créé directement l'objet Socket en renseignant l'adresse et le port de la machine que l'on cible puis on fait un connect() pour initialiser la connexion, et on peut commencer a recevoir et envoyer des données.

Dans les deux cas, pour communiquer, deux méthodes de Socket nous sont utiles : getInputStream() et getOutputStream(), qui renvoient respectivement un objet modélisant le flux d'entré (ce qui arrive comme donnés sur la machine) et le flux de sortie (ce qu'on veut envoyer). On peut alors utiliser la méthode read() sur l'inputStream et/ou write sur l'outputStream.

En pratique, on utilisera bien sur un sous type de Socket approprié au protocole que l'on veut utiliser et un sous type d'input/outputStram adapté au type de données que l'on souhaite envoyer/recevoir.

Exemple coté client :