xamarin android,UWP 网络类型和IP地址

App开发经常要判断网络连通情况,并判断网络类型,获取网络IP。xamarin中可以使用Dependencies提供各平台下的方法,现把各平台代码记录如下:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5
  6 using Android.App;
  7 using Android.Content;
  8 using Android.OS;
  9 using Android.Runtime;
 10 using Android.Views;
 11 using Android.Widget;
 12 using Xamarin.Forms;
 13 using Test.Droid.Dependencies;
 14 using Android.Net;
 15 using Test.Dependencies;
 16 using Java.Net;
 17 using Java.Util;
 18 using Android.Telephony;
 19 using Android.Net.Wifi;
 20 using Org.Apache.Http.Conn.Util;
 21
 22 [assembly: Dependency(typeof(NetworkStatusAndroid))]
 23 namespace Test.Droid.Dependencies
 24 {
 25     public class NetworkStatusAndroid : INetworkStatus
 26     {
 27         public bool HasNetwork()
 28         {
 29
 30             //Test();
 31
 32             ConnectivityManager cwjManager = (ConnectivityManager)Android.App.Application.Context.GetSystemService(Context.ConnectivityService);
 33             bool hasNetwork = true;
 34             if (cwjManager.ActiveNetworkInfo != null)
 35             {
 36                 hasNetwork = cwjManager.ActiveNetworkInfo.IsAvailable;
 37             }
 38             else
 39             {
 40                 hasNetwork = false;
 41             }
 42
 43             return hasNetwork;
 44         }
 45         public string GetNetType()
 46         {
 47             return getCurrentNetType(Android.App.Application.Context);
 48         }
 49
 50         /// <summary>
 51         /// 获取网络类型
 52         /// </summary>
 53         /// <param name="context"></param>
 54         /// <returns></returns>
 55         public static string getCurrentNetType(Context context)
 56         {
 57             String type = "";
 58             ConnectivityManager cm = (ConnectivityManager)context.GetSystemService(Context.ConnectivityService);
 59             NetworkInfo info = cm.ActiveNetworkInfo;
 60             if (info == null)
 61             {
 62                 type = "null";
 63             }
 64             else if (info.Type == ConnectivityType.Wifi)
 65             {
 66                 type = "wifi";
 67             }
 68             else if (info.Type == ConnectivityType.Mobile)
 69             {
 70                 int subType = (int)info.Subtype;
 71                 if (subType == (int)NetworkType.Cdma || subType == (int)NetworkType.Gprs
 72                 || subType == (int)NetworkType.Edge)
 73                 {
 74                     type = "2g";
 75                 }
 76                 else if (subType == (int)NetworkType.Umts || subType == (int)NetworkType.Hsdpa
 77               || subType == (int)NetworkType.EvdoA || subType == (int)NetworkType.Evdo0
 78               || subType == (int)NetworkType.EvdoB)
 79                 {
 80                     type = "3g";
 81                 }
 82                 else if (subType == (int)NetworkType.Lte)
 83                 {// LTE是3g到4g的过渡,是3.9G的全球标准
 84                     type = "4g";
 85                 }
 86             }
 87             return type;
 88         }
 89
 90         /// <summary>获取手机wifi
 91         /// </summary>
 92         /// <returns></returns>
 93         public string GetWifiIP()
 94         {
 95             string IP = String.Empty;
 96             Android.Net.Wifi.WifiManager wifi = (Android.Net.Wifi.WifiManager)Forms.Context.GetSystemService(Context.WifiService);
 97             if (wifi.IsWifiEnabled)
 98             {
 99                 Android.Net.Wifi.WifiInfo wifiInfo = wifi.ConnectionInfo;
100                 IP = Mixin.Common.StringFormat.intToIp(wifiInfo.IpAddress);
101             }
102             return IP;
103         }
104
105         /// <summary>
106         /// 获取手机IP地址
107         /// </summary>
108         /// <returns></returns>
109         public string Test()
110         {
111             IEnumeration ie = NetworkInterface.NetworkInterfaces;
112             while (ie.HasMoreElements)
113             {
114                 NetworkInterface intf = ie.NextElement() as NetworkInterface;
115                 IEnumeration enumIpAddr = intf.InetAddresses;
116                 while (enumIpAddr.HasMoreElements)
117                 {
118
119                     InetAddress inetAddress = enumIpAddr.NextElement() as InetAddress;
120
121                     if (!inetAddress.IsLoopbackAddress && (inetAddress as Inet4Address) != null && inetAddress.HostAddress.ToString() != "127.0.0.1")
122                     {
123                         return inetAddress.HostAddress.ToString();
124                     }
125                 }
126             }
127             return null;
128         }
129     }
130 }

Android

  1 using Test.Dependencies;
  2 using System;
  3 using System.Collections.Generic;
  4 using System.Linq;
  5 using System.Text;
  6 using System.Threading.Tasks;
  7 using Windows.Networking.Connectivity;
  8 using Xamarin.Forms;
  9
 10 [assembly: Dependency(typeof(Test.UWP.Dependencies.NetworkStatus))]
 11 namespace Test.UWP.Dependencies
 12 {
 13     public class NetworkStatus : INetworkStatus
 14     {
 15         static string None = "None";
 16         static string Unknown = "Unknown";
 17         static string IIG = "2G";
 18         static string IIIG = "3G";
 19         static string IVG = "4G";
 20         static string Wifi = "wifi";
 21         static string Lan = "Lan";
 22         /// <summary>当前应用是否联网
 23         /// </summary>
 24         /// <returns></returns>
 25         public bool HasNetwork()
 26         {
 27             bool isConnected = false;
 28
 29             string InternetType = null;
 30             ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();
 31             if (profile == null)
 32             {
 33                 InternetType = NetworkStatus.None;
 34             }
 35             else
 36             {
 37                 NetworkConnectivityLevel cl = profile.GetNetworkConnectivityLevel();
 38                 isConnected = (cl != NetworkConnectivityLevel.None);
 39             }
 40             return isConnected;
 41         }
 42         /// <summary>
 43         /// </summary>
 44         /// <returns></returns>
 45         public string GetWifiIP()
 46         {
 47             var icp = NetworkInformation.GetInternetConnectionProfile();
 48
 49             if (icp?.NetworkAdapter == null) return null;
 50             var hostname =
 51                 NetworkInformation.GetHostNames()
 52                     .SingleOrDefault(
 53                         hn =>
 54                             hn.IPInformation?.NetworkAdapter != null && hn.IPInformation.NetworkAdapter.NetworkAdapterId
 55                             == icp.NetworkAdapter.NetworkAdapterId);
 56
 57             // the ip address
 58             return hostname?.CanonicalName;
 59             //return null;
 60         }
 61         /// <summary>
 62         /// 获取UWP连接类型
 63         /// </summary>
 64         /// <returns></returns>
 65         public string GetNetType()
 66         {
 67             bool isConnected = false;
 68
 69             string InternetType = null;
 70             ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();
 71             if (profile == null)
 72             {
 73                 InternetType = NetworkStatus.None;
 74             }
 75             else
 76             {
 77                 NetworkConnectivityLevel cl = profile.GetNetworkConnectivityLevel();
 78                 isConnected = (cl != NetworkConnectivityLevel.None);
 79             }
 80             if (!isConnected)
 81             {
 82                 return NetworkStatus.None;
 83             }
 84             if (profile.IsWwanConnectionProfile)
 85             {
 86                 if (profile.WwanConnectionProfileDetails == null)
 87                 {
 88                     InternetType = NetworkStatus.Unknown;
 89                 }
 90                 WwanDataClass connectionClass = profile.WwanConnectionProfileDetails.GetCurrentDataClass();
 91                 switch (connectionClass)
 92                 {
 93                     //2G
 94                     case WwanDataClass.Edge:
 95                     case WwanDataClass.Gprs:
 96                         InternetType = NetworkStatus.IIG;
 97                         break;
 98                     //3G
 99                     case WwanDataClass.Cdma1xEvdo:
100                     case WwanDataClass.Cdma1xEvdoRevA:
101                     case WwanDataClass.Cdma1xEvdoRevB:
102                     case WwanDataClass.Cdma1xEvdv:
103                     case WwanDataClass.Cdma1xRtt:
104                     case WwanDataClass.Cdma3xRtt:
105                     case WwanDataClass.CdmaUmb:
106                     case WwanDataClass.Umts:
107                     case WwanDataClass.Hsdpa:
108                     case WwanDataClass.Hsupa:
109                         InternetType = NetworkStatus.IIIG;
110                         break;
111                     //4G
112                     case WwanDataClass.LteAdvanced:
113                         InternetType = NetworkStatus.IVG;
114                         break;
115                     //无网
116                     case WwanDataClass.None:
117                         InternetType = NetworkStatus.Unknown;
118                         break;
119                     case WwanDataClass.Custom:
120                     default:
121                         InternetType = NetworkStatus.Unknown;
122                         break;
123                 }
124             }
125             else if (profile.IsWlanConnectionProfile)
126             {
127                 InternetType = NetworkStatus.Wifi;
128             }
129             else
130             {
131                 ///不是Wifi也不是蜂窝数据判断为Lan
132                 InternetType = NetworkStatus.Lan;
133             }
134             return InternetType;
135         }
136     }
137 }

UWP

IOS的方法还没写全后面不上,先写一部分

 1         public bool HasNetwork()
 2         {
 3             //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
 4             System.Net.IPAddress zeroAddress = System.Net.IPAddress.Parse("0.0.0.0");
 5             bool hasNetWork = false;
 6             NetworkReachability defaultRouteReachability = new NetworkReachability(null, zeroAddress);
 7             NetworkReachabilityFlags flags;
 8             //获得连接的标志
 9             bool didRetrieveFlags = defaultRouteReachability.TryGetFlags(out flags);
10             if (!didRetrieveFlags)
11             {
12                 hasNetWork = false;
13             }
14             //根据获得的连接标志进行判断
15             bool isReachable = (flags & NetworkReachabilityFlags.Reachable) == NetworkReachabilityFlags.Reachable;
16             bool needsConnection = (flags & NetworkReachabilityFlags.ConnectionRequired) == NetworkReachabilityFlags.ConnectionRequired;
17
18             hasNetWork = (isReachable && !needsConnection);
19
20             return hasNetWork;
21         }

IOS

时间: 2024-08-09 02:18:09

xamarin android,UWP 网络类型和IP地址的相关文章

【Linux网络编程】IP地址介绍

什么是 IP 地址IP 地址(Internet Protocol Address)也称为网间地址.网际地址.IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写.IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异. IP 地址是?TCP/IP 协议栈?里的网络层地址方案,IP地址是一种用来对网络设备的逻辑标识. 举个生活中的例子,如果我要寄一

Java知多少(103)网络编程之IP地址和InetAddress类

Java语言的优势之一是Java程序能访问网络资源.Java提供一系列的类支持Java程序访问网络资源. TCP/IP协议和IP地址 为了进行网络通信,通信双方必须遵守通信协议.目前最广泛使用的是TCP/IP协议,它是Internet中各方所遵循的公共协议.TCP(Transport Control Protocol)是一种传输控制协议,IP(Internet Protocol)是一种网际协议,TCP/IP代表这两个协议的. TCP/IP分为四个层次: 网络接口层:负责接收和发送物理帧: 网络层

Android中获取本机ip地址和MAC地址

通过InetAddress.getLocalHost()得到始终是"127.0.0.1",要想得到真正的网络ip地址要通过下面的方法: 首先新建一个工程,修改AndroidManifest.xml文件增加用户权限,如下: <uses-permission android:name="android.permission.INTERNET"/>   //必写 <uses-permission android:name="android.pe

浅谈网络中的IP地址

IP地址是现在生活中不可或缺的,互联网的运用,使我们的生活变得多元化,充满乐趣.想了解这一切,需要先从根本了解,今天浅谈以下IP地址,从以下几个方面介绍: 一.IP地址的作用:在一定范围,唯一的标示,一个上网的设备:(凡是需要上网的设备,必须得有IP地址) 二. IP地址如何表示: 1.让机器看的10101010100010101010 (纯2进制) 2.让人看的点分十进制,X.X.X.X (X表示的是一个10进制)每一个X对应的是8个二进制每一个X对应 1 个字节:X取值范围是 0 --255

网络基础之IP地址和子网掩码

IP地址 IP是英文Internet Protocol的缩写,意思是"网络之间互连的协议",也就是为计算机网络相互连接进行通信而设计的协议.在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则.任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通.正是因为有了IP协议,因特网才得以迅速发展成为世界上最大的.开放的计算机通信网络.因此,IP协议也可以叫做"因特网协议". 互联网是由许多小型网络

linux 网络基础之IP地址

IP是英文Internet Protocol的缩写,意思是“网络之间互连的协议”,也就是为计算机网络相互连接进行通信而设计的协议. IP地址类型分为:公有地址.私有地址. 公有地址 公有地址(Public address)由Inter NIC(Internet Network Information Center因特网信息中心)负责.这些IP地址分配给注册并向Inter NIC提出申请的组织机构.通过它直接访问因特网. 私有地址 私有地址(Private address)属于非注册地址,专门为组

CentOS 6.5网络配置静态IP地址

打开VMvare,并进入虚拟机 2 输入用户名,按回车键,再输入密码,登录系统 3 进行网络配置前,需要确认几个事情: 1. 网络适配器模式是否为NAT模式 右键虚拟机,或者点击VMvare菜单栏中的虚拟机(按ctrl+alt键可切出虚拟机返回到windows,点击虚拟机窗口,可进入虚拟机操作) 点击"设置" 4 确认网络适配器是否处于NAT模式 5 2. 确认网关.网段 点击VMvare虚拟机"编辑"菜单中的"虚拟网络编辑器" 6 在弹出页面上

Android实现仿电脑的ip地址输入

最近该需求改到一个特别的,估计有人也遇到过这种恶心的需求,客户端居然需要输入ip地址,感觉有点扯,客户自己输入ip地址,呵呵,总之,不完成也不行啊,没有砍经理的力气,只能撸代码了. 下面开始正题,先上一下运行效果,方便观看 上面的输入框写成了一个自定义组合控件,方便使用,说起来功能也挺简单的,主要是组合了四个EditText,然后判断EditText输入内容,还有就是对焦点的获取也是比较重要的,由于本人刚学Android不久,可能有更好的办法,这里只是写一下我自己的实现方式,同样的你可以用这种方

网络通讯与IP地址

1.主机:Host,台式机,笔记本,手机等设备 2.网络介质:网线,光纤,无线网Wi-Fi.移动网络 3.数据:一串子节 网络通讯的检测:安装wireshark,通常称为抓包工具 抓,capture 包,packet,数据包 过滤规则:1.过滤IP p.addr eq 192.168.1.107 // 都能显示来源IP和目标IP 2.过滤端口 tcp.port eq 80 // 不管端口是来源的还是目标的都显示 IP地址:用于标识网络上一台主机 用4字节表示 用字符串表示时,10进制,以点号分开