[Windows Phone 8] Utilisation du ProximityDevice NFC

November 02, 2012 -

Windows Phone 8 permet de mettre en place de la communication NFC entre devices, en mode “tap”. Pour commencer à découvrir les APIs, je vous propose un scénario ultra simple : une application Windows Phone 8 ayant deux pages. La première est capable de publier un message via NFC, la seconde est capable de recevoir un message via NFC. Lorsque l’on “tape” deux téléphones entre eux celui sur la page de publication envoi un message qui est reçu sur l’autre téléphone.

Publier un message via NFC

Pour commencer, il est nécessaire de récupérer une instance de la classe ProximityDevice, défini dans Windows.Networking.Proximity.

public partial class Publish : PhoneApplicationPage
{
   ProximityDevice _proximityDevice;

   public Publish()
   {
       InitializeComponent();
       _proximityDevice = ProximityDevice.GetDefault();
   }
}

A partir du moment ou vous récupérez une instance, c’est que le NFC est supporté sur le device !

Pour être en capacité de publier un message, on utilise la méthode PublishMessage, à laquelle on précise un type de message et le contenu du message :

private long _messageId = 0;

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (_proximityDevice != null)//NFC is supported
    {
        _messageId = _proximityDevice.PublishMessage("Windows.SampleNFC", "Hello dude, Windows Phone 8 Rocks !");
    }

    base.OnNavigatedTo(e);
}

A partir de là, l’application enverra le message à n’importe qu’elle autre application qui écoute ce type particulier de message, ici “Windows.SampleNFC”. Le type de message indique le protocole utilisé (avant le “.”) et le sous type de message. Lorsque l’on utilise la méthode PublishMessage, le protocole est obligatoirement “Windows”.

La méthode PublishMessage renvoie un id. Celui-ci est très important car votre application ne peut supprimer qu’un seul type de message à la fois. Aussi, avant de pouvoir publier un autre type de message, il faut stopper la publication, à l’aide de la méthode StopPublishingMessage :

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    if (_proximityDevice != null)
    {
        _proximityDevice.StopPublishingMessage(_messageId);
    }
    base.OnNavigatedFrom(e);
}

Voilà concernant la partie publication.

Souscrire à un message NFC

La souscription à un message NFC est assez similaire, puisqu’elle utilise également un ProximityDevice, que l’on récupère avec la méthode statique GetDefault, comme dans la partie précédente. Ensuite, on utilise la méthode SubscribeForMessage en précisant le type de message qu’on vont recevoir :

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (_proximityDevice != null)
    {
        _subscriptionId = _proximityDevice.SubscribeForMessage("Windows.SampleNFC", OnMessageReceived);
    }
    base.OnNavigatedTo(e);
}

Comme pour la publication, on obtient un id de souscription qu’il est nécessaire d’utiliser pour arrêter d’écouter ce type de message :

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    if (_proximityDevice != null)
    {
        _proximityDevice.StopSubscribingForMessage(_subscriptionId);
    }
    base.OnNavigatedFrom(e);
}

Et voilà le handler appelé lors de la réception d’un message :

private void OnMessageReceived(ProximityDevice sender, ProximityMessage message)
{
    if (message != null)
    {
        Dispatcher.BeginInvoke(() =>
        {
            MessageBox.Show(message.DataAsString);
        });
    }
}

Le tour est joué. Voilà ce que ça donne avec deux téléphones :

A+

Julien

Comments

Share

Tags


Twitter


@InfoAbonneCanal Ça remarche, merci sauf la case à cocher pour retenir la conf. il faut remettre les sous titres à chaque épisode...

January 17, 2017 20:12

Hey bsr @InfoAbonneCanal, FYI depuis 3 jours, plus de sous titres sur la vost de l'application TV connectées​ Samsung ! Merci :-)

January 16, 2017 19:58

A Different Approach To #Test Your @ASPNET Core Application https://t.co/9kjb6NsG1t #dotnet #dotnetcore

January 13, 2017 17:07

Just found this task to generate a release not file at build time using #vsts and #tfs - really cool ! https://t.co/P5tBdRJRnM

January 13, 2017 15:17

RT @brendandburns: The state of Kubernetes in Azure Container Service https://t.co/eruqgVk35l And we're already working on polishing thos…

January 11, 2017 22:26

RT @docker_fr: RT: #Meetup @DockerParis 17/01 chez @venteprivee_fr@benjguin parle comparaison de sol. streaming #bigdata avec https://t.c

January 11, 2017 19:39

CI/CD with #Azure #Container Service and #Docker #Swarm https://t.co/C6ZtoaVNW7 #DevOps #VSTS

January 11, 2017 19:37

RT @rgardler: How to integrate a new Azure Container Service cluster into an existing virtual network using ACS Engine https://t.co/Sxk4h2q…

January 11, 2017 19:35

How to integrate a new @Azure #ContainerService cluster into an existing virtual network using #ACSEnginehttps://t.co/nxRqeVbgcC

January 10, 2017 14:10

RT @fdibot: Envie de comprendre pourquoi @Docker c'est le présent et l'avenir ? venez écouter @jcorioland, @wiboconsulting et moi même au #

January 10, 2017 09:20

#containerd - Core Container Runtime Project For The container Industry https://t.co/1czRFQwcLo

January 05, 2017 08:38

Deprecation of the Team Rooms in #TeamServices and #TFS https://t.co/w2I0tiXqQ7

January 05, 2017 08:02

#Docker Logs API Format Explained https://t.co/0AZEtalRiR

January 05, 2017 07:52

End-to-end cloud #experiences for developers at #Nodejs Interactive North America https://t.co/b8Nbte3i96

January 04, 2017 11:46

Should You Go ‘#Serverless’? The Pros and Cons https://t.co/dvxflKwT5f #Cloud #Architecture

January 03, 2017 08:40