Windows 8 Metro 学习笔记(十六)--NFC
NFC(Near Field Commuciation),近距离无线通讯技术,是一种短距离的高频无线通讯技术。那不禁想到它与Bluetooth蓝牙有什么区别呢?
在网上查询了一下,区别大概分为以下几点:
(1)传输距离
NFC的传输距离一般为10cm,而Bluetooth的传输距离可以达到10米
(2)配置
NFC不需要手动设置匹配,直接将两部设备碰触一下即可;Bluetooth需要单独设置和匹配
(3)适用场合
NFC的适用场景比较多,如支付、打卡、刷卡等;Bluetooth的适用场景就比较局限
NFC对应的WinRT API--Windows.Networking.Proximity
PeerFinder
通过该类可以实现去发现附近的设备并与之创建socket连接,发送接收信息。
在网上查询了一下,区别大概分为以下几点:
(1)传输距离
NFC的传输距离一般为10cm,而Bluetooth的传输距离可以达到10米
(2)配置
NFC不需要手动设置匹配,直接将两部设备碰触一下即可;Bluetooth需要单独设置和匹配
(3)适用场合
NFC的适用场景比较多,如支付、打卡、刷卡等;Bluetooth的适用场景就比较局限
NFC对应的WinRT API--Windows.Networking.Proximity
PeerFinder
通过该类可以实现去发现附近的设备并与之创建socket连接,发送接收信息。
PeerFinder.TriggeredConnectionStateChanged += new TypedEventHandler<object, TriggeredConnectionStateChangedEventArgs>(TriggeredConnectionStateChangedEventHandler);
PeerFinder.ConnectionRequested += new TypedEventHandler<object, ConnectionRequestedEventArgs>(PeerConnectionRequested);
PeerFinder.ConnectionRequested += new TypedEventHandler<object, ConnectionRequestedEventArgs>(PeerConnectionRequested);
PeerFinder.Start();
IReadOnlyList<PeerInformation> _peerInformationList=await PeerFinder.FindAllPeersAsync();
StreamSocket _socket = await PeerFinder.ConnectAsync(peerToConnect);
首先注册两个事件:
TriggeredConnectionStateChanged :用于跟踪与远程机触碰期间的一个连接状态
ConnectionRequested: 当远程机有连接请求时触发
调用相应的方法:
FindAllPeersAsync():浏览所有在无线区域范围内运行相同APP的同等计算机
await PeerFinder.ConnectAsync():与范围内的同等计算机相连接
TriggeredConnectionStateChanged :用于跟踪与远程机触碰期间的一个连接状态
ConnectionRequested: 当远程机有连接请求时触发
调用相应的方法:
FindAllPeersAsync():浏览所有在无线区域范围内运行相同APP的同等计算机
await PeerFinder.ConnectAsync():与范围内的同等计算机相连接
ProximityDevice
可以发送消息或订阅消息至直接的设备,即发送一消息,然后与另一设备触碰一下,别一设备即可收到相应的消息
事件:
DeviceArrived: 当在近距离范围内有设备进入时触发
DeviceDeparted: 当在近距离范围内有设备移出时触发
事件:
DeviceArrived: 当在近距离范围内有设备进入时触发
DeviceDeparted: 当在近距离范围内有设备移出时触发
//先实例化一个ProximityDevice对象,并激活
ProximityDevice _proximityDevice=ProximityDevice.GetDefault();
//发送消息,当然发送方法有很多重载,可以发送字符,可以发送二进制流,可以发送Uri
long _publishedMessageId = _proximityDevice.PublishMessage("Windows.SampleMessageType", publishText);
ProximityDevice _proximityDevice=ProximityDevice.GetDefault();
//发送消息,当然发送方法有很多重载,可以发送字符,可以发送二进制流,可以发送Uri
long _publishedMessageId = _proximityDevice.PublishMessage("Windows.SampleMessageType", publishText);
//另一设备与执行subscribe方法,即可获得消息
当然还有其它的属性和方法,这里就不一一试了,做一个完整的Demo流程,测试一下还是挺好玩的。long _subscribedMessageId = _proximityDevice.SubscribeForMessage("Windows.SampleMessageType", MessageReceived);
void MessageReceived(ProximityDevice proximityDevice, ProximityMessage message)
{
if (message.MessageType == "StringMessage")
{
string mes = message.DataAsString;
}
else if(message.MessageType=="BufferMessage")
{
IBuffer buffer = message.Data;
}
}
void MessageReceived(ProximityDevice proximityDevice, ProximityMessage message)
{
if (message.MessageType == "StringMessage")
{
string mes = message.DataAsString;
}
else if(message.MessageType=="BufferMessage")
{
IBuffer buffer = message.Data;
}
}
PeerFind:使用这个对象需要先寻找,连接,然后进行传输信息
ProximityDevice:这种方式相对简单些,一端发送消息,另一端只要subscribe就可获得消息,但前提是距离得相当地近。
ProximityDevice:这种方式相对简单些,一端发送消息,另一端只要subscribe就可获得消息,但前提是距离得相当地近。
如果您对该技术有更深的理解也希望能指点下哦~
posted on 2012-07-13 14:34 ShinyTang 阅读(3055) 评论(4) 编辑 收藏 举报