[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


#Docker Container Images are now out for #WindowsServer version 1709! https://t.co/T6J0w1kkOW

October 20, 2017 16:42

Getting started with #Traefik and #Kubernetes using #Azure Container Service https://t.co/eW8g370GiS

October 20, 2017 16:40

What’s new in the #Windows 10 Fall Creators Update https://t.co/zkSIsl8anJ

October 17, 2017 15:36

#DockerCon: #Kubernetes orchestration also comes with the latest beta of #Docker for Mac and Windows https://t.co/JYGqa6RTka

October 17, 2017 09:13

RT @sferquel: Docker supports the real #kubernetes orchestrator. So it does not lock you in. Kubectl with docker ee ? Yes we can ! #DockerC

October 17, 2017 09:11

#DockerCon: @Docker Platform and #Moby Project add #Kubernetes https://t.co/LnHeUxzApB

October 17, 2017 09:07

Whoa! Big announcement today at #DockerCon: Extending #Docker Enterprise Edition to Support #Kubernetes https://t.co/lgf2jec1Bs

October 17, 2017 09:04

#Nodejs dev? Learn how to host your apps on #Azure with @John_Papa https://t.co/Z0i7PGcxQc

October 17, 2017 06:28

Cloud Service Map for AWS and Azure Available Now https://t.co/5KZmItRpbI

October 17, 2017 06:19

Check this video to discover how to use #Jenkins Plugins for #Kubernetes w/ @Azure #ContainerService https://t.co/kkcTu5K9li

October 17, 2017 06:06

Edge Device Discovery - an Unfinished Project https://t.co/CyjjjHXscL

October 17, 2017 05:57

Zip Push Deployment for #Azure Web Apps, #Functions and #WebJobs https://t.co/SDurPqdK8P

October 17, 2017 05:41

Migration tips from IaaS to Web App for #Containers on @Azure https://t.co/T03FXCIqIr

October 16, 2017 08:14

Microsoft Cognitive Services - How Content Moderator helps to boost online safety https://t.co/6VtyV28zhe

October 16, 2017 08:13

@mandinette77 Il a plutôt parlé d'info sorties de leurs contexte avec comme exemple Twitter. Ce tweet en est une belle illustration btw :-)

October 15, 2017 22:20