上篇使用了 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
-
當鄰近提供者在傳遞訊息時將會呼叫的處理常式。
傳回值
類型: 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 來轉換,如果你所傳遞的資料是更複雜的,就可能需要自己寫轉換的程序。