Loupe

#WindowsPhone #Bluetooth : lister les devices associés avec notre téléphone

placeitVous 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 Smile)

 

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 Smile

//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.

Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus