在上一篇文章中,我介紹了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