[NFC] 發行(Publish)與訂閱(Subscribe)訊息 (Windows 8/ Windows Phone 8)(2)

上篇使用了 Windows Phone App 說明了 Publish Message,這篇將使用 Windows Store App 說明如何 Subscribe Message。

        上篇使用了 Windows Phone App 說明了 Publish Message,這篇將使用 Windows Store App 說明如何 Subscribe Message。

 

 

        不同於 Publish,Subscribe 只有一個方法 -- ProximityDevice.SubscribeForMessage,這個方法的參數與回傳值如下:

參數
messageType

類型: String [JavaScript] | System.String [.NET] | Platform::String [C++]

要傳遞給這個訂閱之訊息的型別。

messageReceivedHandler

類型: MessageReceivedHandler

當鄰近提供者在傳遞訊息時將會呼叫的處理常式。

 

傳回值

類型: Number [JavaScript] | System.Int64 [.NET] | int64 [C++]

訂閱的唯一識別碼。

 

       

 

        非常類似 Publish 用的方法,而且 MessageReceiveHandler 委派所指向的委派函式也一樣是在另一個執行緒中執行的,所以相同地要注意跨執行緒存取控制項的問題。以下是 Windows Store App 的範例:

    public sealed partial class MainPage : Page
    {
        private ProximityDevice proximitydevice;
        private long subcribeMessageID = -1;
        private string messagetype;
       
        public MainPage()
        {
            this.InitializeComponent();
            proximitydevice = ProximityDevice.GetDefault();
            if (proximitydevice != null)
            {
                messagetype = "Windows.BillSample";
                subcribeMessageID = proximitydevice.SubscribeForMessage(messagetype, MessageReceived);
            }
            else
            { msgtxt.Text = "沒有 NFC"; }
        }

       async  private void MessageReceived(ProximityDevice sender, ProximityMessage message)
        {
            proximitydevice.StopSubscribingForMessage(subcribeMessageID);
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
                () => WriteMessage(message.DataAsString));
        }

        private void WriteMessage(String message)
        { msgtxt.Text = message; }
		       
    }

 

        由於要接收的是上一篇所發行的資料,因此必須定義相同的 Message Type,接著就是直接呼叫 SubscribeForMessage 方法,當 NFC 裝置收到資料後就會進入到 MessageReceived 方法中,先停止訂閱,然後將資料顯示到某個控制項上;因為我們使用的是純文字,所以很簡單地使用了 ProximityMessage.DataAsString 來轉換,如果你所傳遞的資料是更複雜的,就可能需要自己寫轉換的程序。