Android Et Bluetooth
Android Et Bluetooth
Android Et Bluetooth
com/tutoriaux/android/bluetooth/
Forums Tutoriels Magazine FAQs Blogs Projets Chat Newsletter tudes Emploi Club Contacts
Accueil Conception Java .NET Dv. Web EDI Langages SGBD Office Solutions d'entreprise Applications Systmes
FORUMS ANDROID BLOGS ANDROID TUTORIELS ANDROID FAQ ANDROID LIVRES ANDROID
Cet article a pour objectif de vous apprendre manipuler le priphrique Bluetooth, prsent sur la plupart des terminaux Android, dans
une application. Nous allons donc voir toutes les tapes de la cration d'une liaison Bluetooth entre deux terminaux.
1 commentaire
I. Introduction
II. Activer le Bluetooth
III. Dcouvrir les priphriques
IV. Etablir une connexion ct serveur
V. Etablir une connexion ct client
VI. Remerciements
I. Introduction
Pour bien commencer, assurons-nous d'avoir le droit de l'utiliser et que le terminal qui excute notre application possde un priphrique
Bluetooth.
Avant d'tre en mesure d'utiliser le Bluetooth dans votre application, il peut tre de bonne pratique de vrifier si le Bluetooth est activ.
La premire faon est de demander l'utilisateur de le faire lui-mme. Pour cela nous allons afficher une bote de dialogue demandant
l'utilisateur s'il veut oui ou non activer son Bluetooth. Je vous rassure, pas la peine de coder vous-mme la bote de dialogue, le systme
sait le faire tout seul. Elle contiendra le message dans la langue du systme de l'utilisateur ainsi que deux boutons, "Oui" et "Non".
if (!blueAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
En utilisant "onActivityResult()", vous serez capable de savoir si l'utilisateur a cliqu sur oui ou non. Si le Bluetooth s'est correctement
allum, vous aurez un "RESULT_OK". Dans le cas contraire le retour sera "RESULT_CANCELED".
Vous pouvez galement couter l'Intent de broadcast "ACTION_STATE_CHANGED" pour savoir quand l'tat du Bluetooth
change. Vous pourrez alors utiliser "EXTRA_STATE" et "EXTRA_PREVIOUS_STATE" pour connatre l'tat courant et l'tat
antrieur du Bluetooth. Les valeurs possibles sont "STATE_TURNING_ON", "STATE_ON", "STATE_TURNING_OFF" et
"STATE_OFF".
La deuxime faon de faire est d'activer le Bluetooth directement, sans demander son consentement l'utilisateur. Pour ce faire il va nous
falloir demander une nouvelle permission.
Allumage du Bluetooth
if (!blueAdapter.isEnabled()) {
blueAdapter.enable();
Activer la visibilit de votre terminal par Bluetooth active automatiquement le Bluetooth s'il n'est pas dj actif (cf. plus loin).
Si le priphrique ne fait pas partie de ceux qui sont connus, il va falloir rechercher les terminaux visibles proches. Pour cela nous allons
appeler "startDiscovery()", "cancelDiscovery()" permettant de stopper cette recherche. En gnral le processus dure une grosse dizaine de
secondes, suivi d'une page qui affiche les priphriques dcouverts. Voyons comment faire pour rcuprer les rsultats.
La dcouverte des priphriques Bluetooth proximit est trs coteuse en nergie. Pensez donc appeler "cancelDiscovery"
ds que possible.
Si les deux terminaux qui vont se connecter n'ont jamais t interconnects, le systme va automatiquement afficher une
bote de dialogue de confirmation. De ce fait vous n'avez pas vous proccuper au niveau de votre application de savoir si les
terminaux se connaissent ou pas. La connexion va attendre que l'utilisateur valide la demande ou elle va chouer en cas de
refus ou de timeout.
Par dfaut, mme si le Bluetooth est activ, les terminaux Android ne sont pas visibles. Pour activer la visibilit Bluetooth,
nous allons procder de la mme manire que pour activer le Bluetooth. Nous allons demander l'utilisateur de le faire par
le biais d'une bote de dialogue. Notez que par dfaut la dure de visibilit est de 120 secondes, mais vous pouvez dfinir une
dure de votre choix, infrieure ou gale 300 secondes.
Une fois encore vous pourrez rcuprer le choix de l'utilisateur dans le "onActivityResult()", de la mme manire que prcdemment. Un
"RESULT_OK" vous assurera de la bonne visibilit de votre terminal.
Vous pouvez galement tre inform du changement de visibilit de votre terminal en inscrivant un "BroadcastReceiver" pour
l'Intent "ACTION_SCAN_MODE_CHANGED". Les champs "EXTRA_SCAN_MODE" et "EXTRA_PREVIOUS_SCAN_MODE" vous
donneront les informations sur l'tat prcdent et actuel de la visibilit du priphrique. Les valeurs possibles sont
"SCAN_MODE_CONNECTABLE_DISCOVERABLE", "SCAN_MODE_CONNECTABLE", ou "SCAN_MODE_NONE".
Il n'est pas ncessaire pour un terminal d'tre visible pour tablir une connexion vers un autre terminal. Seul celui qui va
hberger la connexion doit tre visible pour que le client puisse le dcouvrir et initier la connexion.
Essayez de faire votre appel la mthode "accept()" dans un Thread spar car la mthode est bloquante. Cela aura pour
effet de provoquer un ANR (Activity Not Responding) si le client met trop de temps se connecter. Notez que toutes les
mthodes des classes "BluetoothServerSocket" et "BluetoothSocket" sont "thread-safe".
Voici un thread simple qui accepte les connexions Bluetooth entrantes.
public ServeurBluetooth() {
// On utilise un objet temporaire qui sera assign plus tard blueServerSocket car blueServerSocket est "final"
BluetoothServerSocket tmp = null;
try {
// MON_UUID est l'UUID (comprenez identifiant serveur) de l'application. Cette valeur est ncessaire ct
tmp = blueAdapter.listenUsingRfcommWithServiceRecord(NOM, MON_UUID);
} catch (IOException e) { }
blueServerSocket = tmp;
}
try {
// On se connecte. Cet appel est bloquant jusqu' la russite ou la leve d'une erreur
blueSocket.connect();
} catch (IOException connectException) {
// Impossible de se connecter, on ferme la socket et on tue le thread
try {
blueSocket.close();
} catch (IOException closeException) { }
return;
}
// Utilisez la connexion (dans un thread spar) pour faire ce que vous voulez
manageConnectedSocket(blueSocket);
}
VI. Remerciements
Je voudrais remercier Claude Leloup pour sa relecture attentive.
Copyright 2011 Sylvain Berfini. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation
expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Cette page est dpose la SACD.
Vos questions techniques : forum d'entraide Android - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'quipe de rdaction du club d'entraide des dveloppeurs francophones
Nous contacter - Hbergement - Participez - Copyright 2000-2011 www.developpez.com - Legal informations.