0
回答
Data Network & Connectivity(数据网络和数据通讯)
滴滴云服务器,限时包月0.9元,为开发者而生>>>   

一、网络信息

在Android中通过ConnectivityManager来判断网络连接状态,如监听手机网络状态(包括GPRS,WIFI, UMTS等);手机状态发生改变时,发送广播;当一个网络连接失败时进行故障切换;为应用程序提供可以获取可用网络的高精度和粗糙的状态。在Windows Phone中提供了Microsoft.Phone.Net.NetworkInformation 命名空间来获取网络信息。

获取网络状态信息

对于Windows Phone应用程序

Microsoft.Phone.Net.NetworkInformation 命名空间提供DeviceNetworkInformation类来了解手机的网络状态信息。下表列出了可用的属性:

CellularMobileOperator 确定移动运营商
IsNetworkAvailable 指示网络是否可用
IsCellularDataEnabled 指示网络是否启用了蜂窝数据
IsCellularDataRoamingEnabled 指示网络是否允许数据漫游
IsWiFiEnabled 指示是否启用了 Wi-Fi

对于Windows Store应用程序

NetworkInformation.GetInternetConnectionProfile()可以获取本地计算机上当前建立的配置文件列表。

var ConnectionProfiles = NetworkInformation.GetConnectionProfiles();

从ConnectionProfile中,可以访问以下网络连接信息:

连接成本 ConnetionCost 提供连接成本详细信息,包括数据限制和漫游信息。
成本类型 NetworkCostType 指示连接目前所用的网络的成本类型。
数据计划状态与使用情况

DataPlanStatus

DataPlanUsage

提供连接所关联的数据计划的具体使用信息。
本地使用情况 NetworkUsage 提供本地连接的使用信息。
网络适配器 NetworkAdapter 标识可为连接提供连接功能的网络适配器。
WLAN和WWAN连接属性

WlanConnectionProfileDetails

WwanConnectionProfileDetails

提供特定于WLAN和WWAN连接配置文件的其他详细信息。

对于Android应用程序,可以使用NetworkInfo类的getActiveNetworkInfo()来获取一个当前网络连接状态的实例,并返回相应的结果。

对于IOS,将Reachability.h和Reachability.m加到自己的项目中,并引用SystemConfiguration.framework就可以使用,其中定义了三种网络状态:无连接、使用3G/GPRS网络、使用WiFi网络。

获取套接字的连接信息

对于Windows Phone应用

套接字使用System.Net.Socket API,Microsoft.Phone.Net.NetworkInformation 命名空间Socket的GetCurrentNetworkInterface() 方法可获取Windows Phone设备的网络套接字链接信息。详细信息请参见Windows Phone 套接字

对于Windows Store应用

使用Windows.Networking.Sockets命名空间中的功能以及Windows应用商店中的TCP或UDP套接字发送和接受数据,其主要接口要DatagramSocket、StreamSocket和StreamSocketListener。并有许多支持类配合他们使用,详细信息请参见Windows商店应用的套接字

对于Android应用,可以使用Java.Net.Socket中的接口获取套接字相关信息,对于IOS应用,可以导入头文件sys/socket.h、netinet/in.h、arpa/inet.h、unistd.h并获取套接字信息。

检测网络更改

对于Windows Phone应用

可以通过注册 NetworkAvailabilityChanged 事件监听网络可用性的更改。

对于Windows Store应用

可以通过注册NetworkStatusChanged事件监听网络可用性的更改。

对于Android应用,可以使用下列方法来检测网络情况

private boolean checkNetwork() {
        ConnectivityManager conn = (ConnectivityManager) getSystemService(Context.CON
NECTIVITY_SERVICE);
        NetworkInfo net = conn.getActiveNetworkInfo();
        if (net != null && net.isConnected()) {
            return true;
        }
        return false;
    }

对于IOS应用,使用下列方法来检测网络连接情况:

Reachability *r = [Reachability reachabilityWithHostName:@“www.apple.com”];
switch ([r currentReachabilityStatus]) {
    case NotReachable:
        // 没有网络连接
        break;
    case ReachableViaWWAN:
        // 使用3G网络
        break;
    case ReachableViaWiFi:
        // 使用WiFi网络
        break;
}

蓝牙

在Android系统中android.bluetooth.BluetoothDevice提供了获取蓝牙的信息和对蓝牙操作的API,在Windows Phone中提供了 StreamSocket 和 PeerFinderWindows 运行时 API。

Windows Phone 8 支持两种蓝牙方案:应用到应用,应用到设备。在每种方案中,都在应用或设备之间建立 StreamSocket 连接。

蓝牙API

Android提供的蓝牙API

BluetoothAdapter 代表本地蓝牙适配器
BluetoothDevice 代表了一个远端的蓝牙设备
BluetoothSocket 代表了一个蓝牙套接字的接口
BluetoothServerSocket 代表打开服务连接来监听可能到来的连接请求
BluetoothClass 描述了一个设备的特性(profile)或该设备上的蓝牙大致可以提供哪些服务(service),但不可信
BluetoothHeadset 提供手机使用蓝牙耳机的支持
BluetoothA2dp 定义高品质的音频,可以从一个设备传输到另一个蓝牙连接
BluetoothProfile.ServiceListener 已经连接到或从服务断开时通知BluetoothProfile IPX的客户时一个接口

与Android的蓝牙API类似,Windows Phone提供了用于使用蓝牙设备的API,主要API如下表:

PeerFinder 提供发现附近设备上的另一应用实例的能力,并在这些对等方应用之间建立套接字连接。对等方应用是运行在另一设备上的另一应用实例
PeerInformation 包含标识对等应用或设备的信息
StreamSocket 支持使用 TCP 流套接字的网络通信
ConnectionRequestedEventArgs 包含通过 ConnectionRequested 事件传递给应用的属性

代码示例

下列代码示例显示了如何使用蓝牙 API 连接到对等方应用和设备、侦听连接请求和检查蓝牙可用性。

连接到对等方应用

async void AppToApp()
{
PeerFinder.Start();
var peers = await PeerFinder.FindAllPeersAsync();
    if (peers.Count == 0)
    {
    Debug.WriteLine("Peer not found.");
    }
    else
    {
    	PeerInformation selectedPeer = peers[0];
        var streamSocket = await PeerFinder.ConnectAsync(selectedPeer);
        DoSomethingUseful(streamSocket);
    }
}

连接到设备

可以使用 PeerFinder.FindAllPeersAsync 来发现已配对的设备。可以使用下表中的一个关键值对来设置 PeerFinder.AlternateIdentities:

PeerFinder.AlternateIdentities["Bluetooth:Paired"] = "" 枚举所有已配对的设备。在此例中,PeerInformation.ServiceName 将为空。对许多设备而言,用于通信的蓝牙端口已执行硬编码,因此可以在 ConnectAsync 调用中直接使用。如果设备播发某项服务,则可以使用配对选项进行枚举,但是使用所需使用的服务的 GUID 来调用 ConnectAsync。
PeerFinder.AlternateIdentities["Bluetooth:SDP"] = "<SDP service guid>" 查找使用服务发现协议 (SDP) 并通过既定 GUID 播发服务的设备。如果找到任何设备,则 PeerInformation.ServiceName 将等于您指定的 GUID。
private async void AppToDevice()
{
   PeerFinder.AlternateIdentities["Bluetooth:Paired"] = "";
   var pairedDevices = await PeerFinder.FindAllPeersAsync();
   if (pairedDevices.Count == 0)
   {
      Debug.WriteLine("No paired devices were found.");
   }
   else
   {
      PeerInformation selectedDevice = pairedDevices[0];
      StreamSocket socket = new StreamSocket();
      await socket.ConnectAsync(selectedDevice.HostName,"1");
      DoSomethingUseful(socket);
   }
}

侦听连接请求

public MainPage()
{
InitializeComponent();
    Loaded += MainPage_Loaded;
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    PeerFinder.ConnectionRequested += PeerFinder_ConnectionRequested;
}
void PeerFinder_ConnectionRequested(object sender, ConnectionRequestedEventArgs args)
{
if (ShouldConnect())
{
ConnectToPeer(args.PeerInformation);
}    
}
async void ConnectToPeer(PeerInformation peer)
{
    StreamSocket socket = await PeerFinder.ConnectAsync(peer);
    DoSomethingUseful(socket); 
}
private bool ShouldConnect()
{
    return true;
}

检测手机上的蓝牙无线电状态。

当蓝牙关闭时,调用 FindAllPeersAsync 将引发异常。通常可通过使用下列代码捕捉此异常来检测到手机上蓝牙的关闭状态。

private async void FindPaired()
{
PeerFinder.AlternateIdentities["Bluetooth:Paired"] = "";
try
    {
    	var peers = await PeerFinder.FindAllPeersAsync();
}
catch (Exception ex)
    {
    	if ((uint)ex.HResult == 0x8007048F)
        {
        	MessageBox.Show("Bluetooth is turned off");
        }
}
}

更多有关Windows Phone蓝牙的内容,请参考Windows Phone 8 的蓝牙

邻近感应

Windows Phone 8 支持使用近场通信 (NFC) 的邻近通信。

邻近感应 API

Windows Phone NFC API:

PeerFinder 使您可以在邻近设备上发现您应用程序的另一个实例,并使用点击笔势或浏览在对等类应用程序之间创建套接字连接。对等方应用是运行在另一设备上的另一应用实例。
ProximityDevice 使您的应用能够与 3-4 厘米左右内的其他设备通信,并且在点击期间交换小的数据负载。
PeerInformation 包含标识对等类的信息。
ProximityMessage 表示从订阅收到的消息。
ConnectionRequestedEventArgs 包含通过 ConnectionRequested 事件传递给应用程序的属性。
TriggeredConnectionStateChangedEventArgs 包含 TriggeredConnectionStateChanged 事件传递给应用程序的属性。

应用场合

1、企业中的应用

各种有意使用智能手机作为下一代门禁卡的机构正在对NFC进行技术测试,这是一种理想的企业应用。

员工还可以利用NFC智能手机和其它设备进入员工停车场或食堂并支付费用。NFC标签可以被放置在会议室内部,与会者就可以在标签前挥动自己的兼容手机使其静音或打开Wi-Fi,或者通过NFC进行蓝牙配对,并进行数据传输。NFC技术也可以将URI方案通过NFC传输到另一台与其配对的手机上,如果另一台手机上面注册了相关联的应用,则会以对本地启动 URI 相同的方式来处理 URI 关联,启动相对应的应用。

2、政府部门的应用

政府还可以利用NFC来改善公共服务、提高运输系统及其它。一些城市和郊区已经开始使用NFC为居民提供更好的服务和改善生活质量。NFC技术的出现让用户可以用智能手机或移动设备支付车费、进入停车场及支付费用、进入游泳池或图书馆等公共设施。

法国移动非接触式协会(AFSCM)在NFC服务方面处于领先地位。据该组织称,法国是欧洲其中一个NFC手机用户最多的国家。AFCSM预计,到2012年底将会有250万法国公民使用NFC设备。法国的“Cityzi”服务使用该国某些地方的用户可以通过快速扫描手机进入火车站,还可以在随处可见的NFC标签上挥动设备获取地图、产品信息或服务。旧金山市有约3万个NFC兼容的停车计时器。澳大利亚悉尼使用NFC标签来引导岩石区的游客。

2、与零售购物体验

NFC可以通过结合无线优惠券、会员卡和支付选择扩展和提升现代购物体验。消费者可以用个人应用程序扫描产品货架上的NFC标签,获得关于该产品更加个性化的信息。举个例子,如果你对坚果过敏,通过扫描产品,你的NFC设备能自动检测出该产品是否含有坚果并做出提醒。通过触碰NFC标签来获得信息、增加到购物篮、获得优惠券和其它新的用途将对零售业产生越来越大的影响。

3、与市场营销

NFC技术对于现代市场营销商有着深远的影响。例如,用户只需用NFC手机在NFC海报、广告、广告牌或电影海报上挥一挥就可以立即获得产品或服务的信息。

商家可以把NFC标签放在店门口,那么用户就可以自动登录Foursquare或者Facebook等社交网络、和朋友分享细节或好东西。比利时的Walibi游乐园推出了首个NFC系统,名为“Walibi Connect”,用户可以扫描NFC腕带来自动发送更新或关于喜欢的活动和景点到Facebook网页。在食品服务方面,酒吧和餐馆可以从一家名为RadipNFC的订购NFC杯垫和其它促销材料,让顾客可以扫描它们获得该店或广告商的更多信息。

4、设备之间共享

NFC还可以作为一种短程技术,当几部设备离得非常近的时候,文件和其它内容就可以在这些设备中传递。这项功能对于需要协作的场所非常有用,如需要分享文件或多个玩家进行游戏的时候。同时,也可以让两个用户使用NFC连接来进行名片交换,比传统的名片或者手动输入通讯录方便快捷。

5、安防领域应用

近距离无线通信(NFC)是一项适用于门禁系统的技术,这种近距离无线通信标准能够在几厘米的距离内实现设备间的数据交换。NFC还完全符合管理非接触式智能卡的ISO标准,这是其成为理想平台的一大显著特点。通过使用配备NFC技术的手机携带便携式身份凭证卡,然后以无线方式由读卡器读取,用户只需在读卡器前出示手机即可开门。

NFC虚拟凭证卡的最简单模式就是复制现行卡片内的门禁原则。手机将身份信息传递给读卡器,后者又传送给现有的门禁系统,最后打开门。这样,无需使用钥匙或智能卡,就可提供更安全、更便携的方式来配置、监控和修改凭证卡安全参数,不仅消除了凭证卡被复制的风险,而且还可在必要时临时分发凭证卡,若丢失或被盗也可取消凭证卡。

代码示例

发送和接收 NFC 消息

发送消息

Windows Phone 应用一次仅支持一个 WriteTag 消息。在您可以发布新的 WriteTag 消息之前,您应该停止发布任何现有消息。

ProximityDevice device = ProximityDevice.GetDefault();
if (device!= null)
{
  long Id = device.PublishMessage("Windows.SampleMessageType", "Hello World!");
  Debug.WriteLine("Published Message. ID is {0}", Id);
}

接收消息

ProximityDevice device = ProximityDevice.GetDefault();
if (device!= null)
{
  long Id = device.SubscribeForMessage ("Windows.SampleMessageType", messageReceived);
  Debug.WriteLine("Published Message. ID is {0}", Id);
}

private void messageReceived(ProximityDevice sender, ProximityMessage message)
{
  Debug.WriteLine("Received from {0}:'{1}'", sender.DeviceId, message.DataAsString);
}

查找 Windows Phone 对等方应用

开始查找对等方

ProximityDevice device = ProximityDevice.GetDefault();
if (device!= null)
{
  PeerFinder.TriggeredConnectionStateChanged += OnTriggeredConnectionStateChanged;
  PeerFinder.Start();
}

处理连接状态变化

StreamSocket _streamSocket;
void OnTriggeredConnectionStateChanged(object sender, TriggeredConnectionStateChangedEventArgs args)
{
    switch (args.State)
    {
        case TriggeredConnectState.Listening:
            break;
         case TriggeredConnectState.PeerFound:
             break;
         case TriggeredConnectState.Connecting:
            break;
          case TriggeredConnectState.Completed:
            _streamSocket = args.Socket;
             break;
         case TriggeredConnectState.Canceled:
              break;
         case TriggeredConnectState.Failed:
             break;
       }
}

查找 Windows 8 对等方应用

若要查找其他平台(如 Windows 8)上的对等方应用,则必须首先定义您的应用在该平台上的备用应用 ID。

ProximityDevice device = ProximityDevice.GetDefault();
if (device != null)
{
  PeerFinder.AlternateIdentities.Add("Windows", "my Win8 appID");
  PeerFinder.TriggeredConnectionStateChanged += OnTriggeredConnectionStateChanged;
  PeerFinder.Start();
}

对于Windows Store应用程序

使用邻近功能在进行点击手势过程中快速交换数据,或者使用点击借助基础结构网络、Wi-Fi Direct 或 Bluetooth 设置长期的信道。

属于 Windows.Networking.Proximity 命名空间的 Windows 运行时中的类支持邻近。你可以使用 ProximityDevice 类与 3-4 厘米范围内的其他计算机通信,并且在点击过程中交换负载小的数据。你可以使用 PeerFinder 类与对等应用进行通信,并设置长期套接字连接。对等应用是运行在另一台计算机上的应用的另一个实例。

例如,如下代码使用 ProximityDevice 类的 GetDefault 静态方法为本地计算机获取对邻近设备的引用。通过将事件处理程序与 DeviceArrived 和 DeviceDeparted 事件进行关联,你可以知道设备何时进入或离开邻近感应。

Windows.Networking.Proximity.ProximityDevice proximityDevice;

public MainPage()
{
    InitializeComponent();

    proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();

    if (proximityDevice != null)
    {
        proximityDevice.DeviceArrived += ProximityDeviceArrived;
        proximityDevice.DeviceDeparted += ProximityDeviceDeparted;
    }
    else
    {
        MessageTextBlock.Text += "Failed to initialize proximity device.\n";
    }
}

Windows.UI.Core.CoreDispatcher _dispatcher = Window.Current.Dispatcher;

private async void ProximityDeviceArrived(object sender)
{
await _dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
() =>
{
            MessageTextBlock.Text += "Proximate device arrived.\n";
});
}

private async void ProximityDeviceDeparted(object sender)
{
await _dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
() =>
{
            MessageTextBlock.Text += "Proximate device departed.\n";
});
}

如何确定是否支持邻近功能

可以通过以下方式确定是否已安装支持邻近感应的设备:检查 PeerFinder.SupportedDiscoveryTypes 属性以查看是否支持 Triggered 连接,检查 GetDefault 方法是否返回 NULL,或者获取所有邻近设备列表并确保列表至少列出一台设备。

使用邻近感应激活应用

当你使用 PeerFinder 并点击以将应用连接到另一台计算机上的对等应用时,如果该应用尚未运行或未在前台运行,Windows 将提示另一台计算机的用户激活该应用。如果该应用已在前台运行,将在不首先提示用户的情况下引发激活事件。你也可以通过调用接受一个字符串参数的 PeerFinder.Start 方法重载来激活未在前台运行的应用。Start 方法的字符串参数包含发送到对等应用的消息。该应用将通过传递到激活参数的消息激活。

当你使用点击手势激活对等应用时,将激活应用,并且激活 Kind 是 Launch。如果你通过使用 PeerFinder.Start 方法发送消息来激活应用,可以从启动参数的 Arguments 属性检索消息文本。如果为了打开 StreamSocket 而激活你的应用,则 Arguments 属性将返回字符串 Windows.Networking.Proximity.PeerFinder:StreamSocket。在此情况下,将 TriggeredConnectionStateChanged 属性设置为适当的事件处理程序,并调用 PeerFinder.Start 方法完成套接字连接。以下示例摘自快速入门:使用点击或浏览连接应用程序中的示例代码,并依赖 OnLaunched 事件中的代码传递启动参数。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    DisplayNameTextBox.Text = Windows.Networking.Proximity.PeerFinder.DisplayName;
    Windows.Networking.Proximity.PeerFinder.ConnectionRequested += ConnectionRequested;

    // If activated from launch or from the background, create a peer connection.
    var args = e.Parameter as Windows.ApplicationModel.Activation.LaunchActivatedEventArgs;
    if (args != null && args.Kind == Windows.ApplicationModel.Activation.ActivationKind.Launch)
    {
        if (args.Arguments == "Windows.Networking.Proximity.PeerFinder:StreamSocket")
        {
            AdvertiseForPeersButton_Click(null, null);
        }
    }
}

对于Android应用程序

Android应用程序的NFC支持主要在android.nfc和android.nfc.tech两个包中,其一共分为NFC BasicsAdvanced NFCHost-based Card Emulation三种使用方式。


 [BW(TDLXX1]这里最好的方法是结合demo

这一节内容非常重要。

1.  需要一个 Win8 和 WP8 通过本地WIFI链接的demo  //问问leon

2.  介绍NFC能做的事情,结合启动器,(商店,通讯录,蓝牙和WIFI匹配等功能)

举报
顶部