#WindowsPhone #Bluetooth : lister les devices associés avec notre téléphone
Vous pouvez utiliser l’API “ Windows.Networking.Proximity.PeerFinder” depuis Windows Phone 8.0 pour lister les périphériques et les apps à portée “Bluetooth" de votre téléphone. Dans cet article vous découvrirez comment trouver les périphériques déjà associés à votre téléphone et ouvrir une socket de connexion dessus en utilisant la même API.
Pré-requis
La première chose à faire est d’activer deux capacités dans votre manifest : ID_CAP_PROXIMITY et ID_CAP_NETWORKING. La première autorise l’utilisation de PeerFinder et la seconde autorise la communication via Socket.
Ensuite, il est intéressant de détecter si le Bluetooth est bien actif sur le téléphone de l’utilisateur : je vous conseille la lecture de la partie 1 de Pierre Alexandre sur le Bluetooth. (on attends avec impatience la partie 2 en français et pas en franglais svp )
Les choses sérieuses (code)
Pour lister les périphériques déjà associés, on va utiliser le PeerFinder sans même avoir a le démarrer. Pour cela, nous allons spécifier une identité alternative (AlternateIdentities) (wahou des agents secrets !!).
//Device pairé seulement PeerFinder.AlternateIdentities["Bluetooth:Paired"] = "";
En faisant cela, on indique ne vouloir que les devices déjà associés à l’API. Oui, ce n’est pas nécessairement intuitif mais c’est bien documenté dans MSDN :) Vous remarquerez aussi que je n’ai pas eu besoin d’appeler PeerFInder.Start pour utiliser l’API.
Ensuite, on récupère le device voulu en utilisant son displayName mais on pourrait demander à l’utilisateur d’en choisir un. On peut alors créer une StreamSocket et se connecter dessus en utilisant les informations du Peer que l’on vient de trouver. Dans notre cas, on se connecte sur le port 16 de communication (RFCOMM). D’autres périphériques utiliseront bien sûr d’autres ports
//Récupération du dongle dans les devices connectés var allPeers = (await PeerFinder.FindAllPeersAsync()).ToList(); //On en prends un en particulier PeerInformation dongle = allPeers.FirstOrDefault(p => p.DisplayName == "NousAInfiniteSquare"); //Création de la socket de communication _socket = new StreamSocket(); //On se connecte await _socket.ConnectAsync(dongle.HostName, "16"); _socket.Dispose();
Si le périphérique n’est pas à portée, une exception avec le HResult “-2147014836” est levée.
Commentaires