Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Windows Phone 8 近场通信 NFC / Bluetooth Proximity

今天给大家介绍下 windows phone 8 的近场通信技术,常用近场通信技术有几种 NFC、蓝牙(Bluetooth)、Wifi 以上三种都是在WP8的API中所支持的,NFC我个人感觉是一个可以让人耳目一新的功能。而且NFC设备目前被很多手机厂商应用,目前NFC技术在手机上应用主要有以下五类。升级到WP8必需知道的13个特性 系列文章目录地址:http://www.linuxidc.com/Linux/2013-08/89003.htm
  1. 接触通过(Touch and Go),如门禁管理、车票和门票等,用户将储存着票证或门控密码的设备靠近读卡器即可,也可用于物流管理。
  2. 接触支付(Touch and Pay),如非接触式移动支付,用户将设备靠近嵌有NFC模块的POS机可进行支付,并确认交易。
  3. 接触连接(Touch and Connect),如把两个NFC设备相连接(如图1中手机和笔记本电脑),进行点对点(Peer-to-Peer)数据传输,例如下载音乐、图片互传和交换通讯录等。
  4. 接触浏览(Touch and Explore),用户可将NFC手机接靠近街头有NFC功能的智能公用电话或海报,来浏览交通信息等。
  5. 下载接触(Load and Touch),用户可通过GPRS网络接收或下载信息,用于支付或门禁等功能,如前述,用户可发送特定格式的短信至家政服务员的手机来控制家政服务员进出住宅的权限。
可能有人会问到关于NFC的安全问题,以及传输速度问题,这里我也给大家列出NFC的特性来帮助大家了解NFC。
  1. 当设备之间的距离在 3-4 厘米(1-1.5 英寸)内时发生通信。
  2. 通信是非常具有选择性和意图性的,因为用户有意将各自的设备放在一起进行连接。
  3. 最大的理论数据传输速率是 424 kbits/s。典型的数据传输速率在 30 kbits/s 至 60 kbits/s 之间。
  4. 也可以在 NFC 设备和无动力 NFC 芯片或标记之间发生通信。
  5. 另外我们还可以使用 System.Security.Cryptography.AesManaged 对数据流进行加密。
如何在我们的应用中使用NFC呢?下来我逐一给大家介绍。首先 还是设置我们的 WMAppManifest.xml 文件标记我们应用需要是有近场通信技术 这里我还选择了NetWoking 是因为后面我还会使用 Bluetooth 和 TCP/IP (Wi-Fi)连接。 建立NFC的连接我们要用到 Windows.Networking.Proximity.ProximityDevice 我们可以使用 Windows.Networking.Proximity.ProximityDevice.GetDefault(); 来判断手机硬件是否支持NFC。 private void InitializeProximityDevice(){if (mProximityDevice == null){mProximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();}if (mProximityDevice != null){mProximityDevice.DeviceArrived += ProximityDeviceArrived;mProximityDevice.DeviceDeparted += ProximityDeviceDeparted;AddToSysMsgList(MSG_NFC_EXISTS);}else { AddToSysMsgList(MSG_NFC_NOT_EXISTS); }} 上面的代码还看到了连个事件 DeviceArrived 和 DeviceDeparted 分别用于判断一个NFC设备进入和离开我们设备的感应区域。 下面我列举一个发送消息的code ProximityDevice device = ProximityDevice.GetDefault();// Make sure NFC is supportedif (device!= null){long Id = device.PublishMessage("Windows.SampleMessageType", "Hello World!");Debug.WriteLine("Published Message. ID is {0}", Id);// Store the unique message Id so that it // can be used to stop publishing this message}  注册接收消息的code Windows.Networking.Proximity.ProximityDevice proximityDevice;private void InitializeProximityDevice(){proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();if (proximityDevice != null) {proximityDevice.DeviceArrived += ProximityDeviceArrived;proximityDevice.DeviceDeparted += ProximityDeviceDeparted;WriteMessageText("Proximity device initialized. ");}else{WriteMessageText("Failed to initialized proximity device. ");}}private void ProximityDeviceArrived(Windows.Networking.Proximity.ProximityDevice device){WriteMessageText("Proximate device arrived. id = " + device.DeviceId + " ");}private void ProximityDeviceDeparted(Windows.Networking.Proximity.ProximityDevice device){WriteMessageText("Proximate device departed. id = " + device.DeviceId + " ");}// Write a message to MessageBlock on the UI thread.private Windows.UI.Core.CoreDispatcher messageDispatcher = Window.Current.CoreWindow.Dispatcher;async private void WriteMessageText(string message, bool overwrite = false){await messageDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() =>{if (overwrite)MessageBlock.Text = message;elseMessageBlock.Text += message;});}  这里WP8除了支持信息的传输还支持更多的文件类型 Windows.Networking.Proximity.ProximityDevice proximityDevice;private void PublishLaunchApp(){proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();if (proximityDevice != null){// The format of the app launch string is: "<args> Windows <AppName>".// The string is tab or null delimited.// The <args> string can be an empty string ("").string launchArgs = "user=default";// The format of the AppName is: PackageFamilyName!PRAID.string praid = "MyAppId"; // The Application Id value from your package.appxmanifest.string appName = Windows.ApplicationModel.Package.Current.Id.FamilyName + "!" + praid;string launchAppMessage = launchArgs + " Windows " + appName;var dataWriter = new Windows.Storage.Streams.DataWriter();dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE;dataWriter.WriteString(launchAppMessage);var launchAppPubId =proximityDevice.PublishBinaryMessage("LaunchApp:WriteTag", dataWriter.DetachBuffer());}}  详细请参考 如果你使用Nokia的NDEF 请参考其中包含了 配对请求,Tag信息的写入,以及设备间交互。其中交互功能可以使用连接deeplink的形式打开应用传入参数或者打开应用或者应用商店。参考我之前的帖子:Windows Phone 8 中的应用间通信  http://www.linuxidc.com/Linux/2013-08/89004.htm