在上一篇文章中,我介紹了NFC Emulator for Windows Phone 8,在這個Emulator出現前,其實Windows 8 就有提供NFC Emulator,不過要用這個工具比較麻煩,得先下載Windows Driver Kit 8,裡面有Windows 8 NFC Emulator的source code,開發者得自行編譯後才能使用。
文/黃忠成
NFC Emulator for Windows 8
在上一篇文章中,我介紹了NFC Emulator for Windows Phone 8,在這個Emulator出現前,其實Windows 8 就有提供NFC Emulator,不過要用這個工具比較麻煩,得先下載Windows Driver Kit 8,裡面有Windows 8 NFC Emulator的source code,
開發者得自行編譯後才能使用。之前我在嘗試下載Windows Driver Kit 8時發生錯誤,持續測了好久才下載並安裝成功,讀者們如果只是要使用這個Driver的話,可以直接到下列網址下載:
http://www.code6421.com/BlogPics/NFCDriver.zip
或是自己下載Windows Driver Kit 8。
http://msdn.microsoft.com/en-US/windows/hardware/hh852362
安裝
下載了NFCDriver.zip後解開,會看到以下的目錄結構。
圖1
切換至NFCDriver目錄,會看到一個package.cer,這是一個憑證,必須先行安裝到Windows 8中才能正確地安裝NFC Emulator Driver。
圖2
圖3
圖4
圖5
完成後以系統管理員權限開啟命令列模式,切換到NFCDriver目錄,鍵入以下指令。
devcon.exe install NetNfpProvider.inf WUDF\NetNfpProvider |
沒意外的話會出現下圖。
圖6
點選安裝後,安裝NFC Emulator for Windows 8的工作就完成了。
測試
通常,測試這個NFC Emulator至少需要兩台Windows 8,所以此處我開了另一個VM來測試,首先先撰寫一個Windows Store的NFC應用程式,記得要開啟NFC權限。
圖7
下面是測試的程式碼。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Networking.Proximity;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
namespace App21
{
///
/// An empty page that can be used on its own or navigated to within a Frame.
///
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ProximityDevice device = ProximityDevice.GetDefault();
device.PublishUriMessage(new Uri("http://www.microsoft.com"));
}
}
}
接著請在要測試接收NFC資料的VM上開啟防火牆設定並關閉私人網路的部分(注意,測試完之後請記得開啟)。
圖8
接著在要執行這隻Windows Store程式的電腦上執行netnfpcontrol.exe(在NFCDriver.zip中)。
格式: netnfpcontrol <IP> 範例: netnfpcontrol 192.168.1.113 |
會看到以下的畫面。
圖9
然後執行我們的Windows Store程式,按下畫面上的按鈕來送出Uri訊息。
圖11
一切正常的話,目的地VM就會出現下列的畫面。
圖12
與Windows Phone 8 NFC Emulator互通
Windows Phone 8 的NFC Emulator一開始就設計成可以跟Windows 8 NFC Emulator溝通,用法很簡單,只要開啟ProximityTapper程式,輸入目標機器的IP(該機器或是VM必須安裝本文提到的NFC Emulator Driver),按下Add Device按鈕。
圖13
完成後點選剛新增的那個Device,然後點選Tap Selected Devices and Remain Connected按鈕。
圖14
接著就可以點選下方的Send Url來送出資料。
圖15
圖16
當然,你也可以使用Windows Phone 8 Emulator來執行所寫的NFC應用程式,由Windows Phone 8 Emulator送出 NFC資料到Windows 8,下面是前篇文章所寫過的測試程式。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using PhoneApp17.Resources;
using Windows.Networking.Proximity;
namespace PhoneApp17
{
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
// Sample code to localize the ApplicationBar
//BuildLocalizedApplicationBar();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ProximityDevice device = ProximityDevice.GetDefault();
device.PublishUriMessage(new Uri("http://www.microsoft.com"));
}
}
}
執行後到ProximityTapper去配對Windows 8(IP那個)跟Windows Phone 8 Emulator。
圖17
按下Windows Phone 8 Emulator上程式的按鈕後。
圖18
注意: 測試憑證沒有要使用時,請到憑證管理員中刪除。
參考資料
http://www.silverlightshow.net/items/Near-Field-Communication-in-windows-8-part-1.aspx