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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Xamarin.Forms;
using Test.Droid.Dependencies;
using Android.Net;
using Test.Dependencies;
using Java.Net;
using Java.Util;
using Android.Telephony;
using Android.Net.Wifi;
using Org.Apache.Http.Conn.Util; [assembly: Dependency(typeof(NetworkStatusAndroid))]
namespace Test.Droid.Dependencies
{
public class NetworkStatusAndroid : INetworkStatus
{
public bool HasNetwork()
{ //Test(); ConnectivityManager cwjManager = (ConnectivityManager)Android.App.Application.Context.GetSystemService(Context.ConnectivityService);
bool hasNetwork = true;
if (cwjManager.ActiveNetworkInfo != null)
{
hasNetwork = cwjManager.ActiveNetworkInfo.IsAvailable;
}
else
{
hasNetwork = false;
} return hasNetwork;
}
public string GetNetType()
{
return getCurrentNetType(Android.App.Application.Context);
} /// <summary>
/// 获取网络类型
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public static string getCurrentNetType(Context context)
{
String type = "";
ConnectivityManager cm = (ConnectivityManager)context.GetSystemService(Context.ConnectivityService);
NetworkInfo info = cm.ActiveNetworkInfo;
if (info == null)
{
type = "null";
}
else if (info.Type == ConnectivityType.Wifi)
{
type = "wifi";
}
else if (info.Type == ConnectivityType.Mobile)
{
int subType = (int)info.Subtype;
if (subType == (int)NetworkType.Cdma || subType == (int)NetworkType.Gprs
|| subType == (int)NetworkType.Edge)
{
type = "2g";
}
else if (subType == (int)NetworkType.Umts || subType == (int)NetworkType.Hsdpa
|| subType == (int)NetworkType.EvdoA || subType == (int)NetworkType.Evdo0
|| subType == (int)NetworkType.EvdoB)
{
type = "3g";
}
else if (subType == (int)NetworkType.Lte)
{// LTE是3g到4g的过渡,是3.9G的全球标准
type = "4g";
}
}
return type;
} /// <summary>获取手机wifi
/// </summary>
/// <returns></returns>
public string GetWifiIP()
{
string IP = String.Empty;
Android.Net.Wifi.WifiManager wifi = (Android.Net.Wifi.WifiManager)Forms.Context.GetSystemService(Context.WifiService);
if (wifi.IsWifiEnabled)
{
Android.Net.Wifi.WifiInfo wifiInfo = wifi.ConnectionInfo;
IP = Mixin.Common.StringFormat.intToIp(wifiInfo.IpAddress);
}
return IP;
} /// <summary>
/// 获取手机IP地址
/// </summary>
/// <returns></returns>
public string Test()
{
IEnumeration ie = NetworkInterface.NetworkInterfaces;
while (ie.HasMoreElements)
{
NetworkInterface intf = ie.NextElement() as NetworkInterface;
IEnumeration enumIpAddr = intf.InetAddresses;
while (enumIpAddr.HasMoreElements)
{ InetAddress inetAddress = enumIpAddr.NextElement() as InetAddress; if (!inetAddress.IsLoopbackAddress && (inetAddress as Inet4Address) != null && inetAddress.HostAddress.ToString() != "127.0.0.1")
{
return inetAddress.HostAddress.ToString();
}
}
}
return null;
}
}
}

Android

 using Test.Dependencies;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Networking.Connectivity;
using Xamarin.Forms; [assembly: Dependency(typeof(Test.UWP.Dependencies.NetworkStatus))]
namespace Test.UWP.Dependencies
{
public class NetworkStatus : INetworkStatus
{
static string None = "None";
static string Unknown = "Unknown";
static string IIG = "2G";
static string IIIG = "3G";
static string IVG = "4G";
static string Wifi = "wifi";
static string Lan = "Lan";
/// <summary>当前应用是否联网
/// </summary>
/// <returns></returns>
public bool HasNetwork()
{
bool isConnected = false; string InternetType = null;
ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();
if (profile == null)
{
InternetType = NetworkStatus.None;
}
else
{
NetworkConnectivityLevel cl = profile.GetNetworkConnectivityLevel();
isConnected = (cl != NetworkConnectivityLevel.None);
}
return isConnected;
}
/// <summary>
/// </summary>
/// <returns></returns>
public string GetWifiIP()
{
var icp = NetworkInformation.GetInternetConnectionProfile(); if (icp?.NetworkAdapter == null) return null;
var hostname =
NetworkInformation.GetHostNames()
.SingleOrDefault(
hn =>
hn.IPInformation?.NetworkAdapter != null && hn.IPInformation.NetworkAdapter.NetworkAdapterId
== icp.NetworkAdapter.NetworkAdapterId); // the ip address
return hostname?.CanonicalName;
//return null;
}
/// <summary>
/// 获取UWP连接类型
/// </summary>
/// <returns></returns>
public string GetNetType()
{
bool isConnected = false; string InternetType = null;
ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();
if (profile == null)
{
InternetType = NetworkStatus.None;
}
else
{
NetworkConnectivityLevel cl = profile.GetNetworkConnectivityLevel();
isConnected = (cl != NetworkConnectivityLevel.None);
}
if (!isConnected)
{
return NetworkStatus.None;
}
if (profile.IsWwanConnectionProfile)
{
if (profile.WwanConnectionProfileDetails == null)
{
InternetType = NetworkStatus.Unknown;
}
WwanDataClass connectionClass = profile.WwanConnectionProfileDetails.GetCurrentDataClass();
switch (connectionClass)
{
//2G
case WwanDataClass.Edge:
case WwanDataClass.Gprs:
InternetType = NetworkStatus.IIG;
break;
//3G
case WwanDataClass.Cdma1xEvdo:
case WwanDataClass.Cdma1xEvdoRevA:
case WwanDataClass.Cdma1xEvdoRevB:
case WwanDataClass.Cdma1xEvdv:
case WwanDataClass.Cdma1xRtt:
case WwanDataClass.Cdma3xRtt:
case WwanDataClass.CdmaUmb:
case WwanDataClass.Umts:
case WwanDataClass.Hsdpa:
case WwanDataClass.Hsupa:
InternetType = NetworkStatus.IIIG;
break;
//4G
case WwanDataClass.LteAdvanced:
InternetType = NetworkStatus.IVG;
break;
//无网
case WwanDataClass.None:
InternetType = NetworkStatus.Unknown;
break;
case WwanDataClass.Custom:
default:
InternetType = NetworkStatus.Unknown;
break;
}
}
else if (profile.IsWlanConnectionProfile)
{
InternetType = NetworkStatus.Wifi;
}
else
{
///不是Wifi也不是蜂窝数据判断为Lan
InternetType = NetworkStatus.Lan;
}
return InternetType;
}
}
}

UWP

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using Foundation;
using UIKit;
using Test.iOS.Dependencies;
using Xamarin.Forms;
using Test.Dependencies;
using SystemConfiguration;
using System.Net;
using CoreFoundation;
using ObjCRuntime; [assembly: Dependency(typeof(NetworkStatusIOS))]
namespace Test.iOS.Dependencies
{
public class NetworkStatusIOS : INetworkStatus
{ public bool HasNetwork()
{
//创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
System.Net.IPAddress zeroAddress = System.Net.IPAddress.Parse("0.0.0.0");
bool hasNetWork = false;
NetworkReachability defaultRouteReachability = new NetworkReachability(null, zeroAddress);
NetworkReachabilityFlags flags;
//获得连接的标志
bool didRetrieveFlags = defaultRouteReachability.TryGetFlags(out flags);
if (!didRetrieveFlags)
{
hasNetWork = false;
}
//根据获得的连接标志进行判断
bool isReachable = (flags & NetworkReachabilityFlags.Reachable) == NetworkReachabilityFlags.Reachable;
bool needsConnection = (flags & NetworkReachabilityFlags.ConnectionRequired) == NetworkReachabilityFlags.ConnectionRequired; hasNetWork = (isReachable && !needsConnection); return hasNetWork;
} public string GetWifiIP()
{
//SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); //创建测试连接的引用:
System.Net.IPAddress zeroAddress = System.Net.IPAddress.Parse("0.0.0.0");
NetworkReachabilityFlags flags = NetworkReachabilityFlags.IsLocalAddress;
IsAdHocWiFiNetworkAvailable(out flags);
//NetworkReachability defaultRouteReachability = new NetworkReachability(null, zeroAddress);
//defaultRouteReachability.TryGetFlags return "";
}
public string GetNetType()
{
string strNetworkType = ""; //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
System.Net.IPAddress zeroAddress = System.Net.IPAddress.Parse("0.0.0.0");
bool hasNetWork = false;
NetworkReachability defaultRouteReachability = new NetworkReachability(null, zeroAddress);
NetworkReachabilityFlags flags;
//获得连接的标志
bool didRetrieveFlags = defaultRouteReachability.TryGetFlags(out flags);
if (!didRetrieveFlags)
{
hasNetWork = false;
} if ((flags & NetworkReachabilityFlags.ConnectionRequired) == )
{
strNetworkType = "WIFI";
}
if (
((flags & NetworkReachabilityFlags.ConnectionOnDemand) != ) ||
(flags & NetworkReachabilityFlags.ConnectionOnTraffic) !=
)
{
if ((flags & NetworkReachabilityFlags.InterventionRequired) == )
{
strNetworkType = "WIFI";
}
} if ((flags & NetworkReachabilityFlags.IsWWAN)==NetworkReachabilityFlags.IsWWAN)
{
if ((float)PlatformName.iOS > )
{
CoreTelephony.CTTelephonyNetworkInfo info = new CoreTelephony.CTTelephonyNetworkInfo();
string currentRadioAccessTechnology = info.CurrentRadioAccessTechnology;
if (!string.IsNullOrEmpty(currentRadioAccessTechnology))
{
if (currentRadioAccessTechnology == "CTRadioAccessTechnologyLTE")
{
strNetworkType = "4G";
}
else if (currentRadioAccessTechnology == "CTRadioAccessTechnologyEdge" ||
currentRadioAccessTechnology == "CTRadioAccessTechnologyGPRS"
)
{
strNetworkType = "2G";
}
else
{
strNetworkType = "3G";
}
}
}
else
{
if ((flags & NetworkReachabilityFlags.Reachable)== NetworkReachabilityFlags.Reachable)
{
if ((flags & NetworkReachabilityFlags.TransientConnection) == NetworkReachabilityFlags.TransientConnection)
{
if ((flags & NetworkReachabilityFlags.ConnectionRequired) == NetworkReachabilityFlags.ConnectionRequired)
{
strNetworkType = "2G";
}
else
{
strNetworkType = "3G";
}
}
}
}
} return strNetworkType;
} #region 方式一
public bool IsConnected { get; set; }
public void CheckNetworkConnection()
{
InternetConnectionStatus();
} private void UpdateNetworkStatus()
{
if (InternetConnectionStatus())
{
IsConnected = true;
}
else if (LocalWifiConnectionStatus())
{
IsConnected = true;
}
else
{
IsConnected = false;
}
} private event EventHandler ReachabilityChanged;
private void OnChange(NetworkReachabilityFlags flags)
{
var h = ReachabilityChanged;
if (h != null)
h(null, EventArgs.Empty);
} private NetworkReachability defaultRouteReachability;
private bool IsNetworkAvailable(out NetworkReachabilityFlags flags)
{
if (defaultRouteReachability == null)
{
defaultRouteReachability = new NetworkReachability(new IPAddress());
//defaultRouteReachability.SetCallback(OnChange);
defaultRouteReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
}
if (!defaultRouteReachability.TryGetFlags(out flags))
return false;
return IsReachableWithoutRequiringConnection(flags);
} private NetworkReachability adHocWiFiNetworkReachability;
private bool IsAdHocWiFiNetworkAvailable(out NetworkReachabilityFlags flags)
{
if (adHocWiFiNetworkReachability == null)
{
adHocWiFiNetworkReachability = new NetworkReachability(new IPAddress(new byte[] { , , , }));
//adHocWiFiNetworkReachability.SetCallback(OnChange);
adHocWiFiNetworkReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
} if (!adHocWiFiNetworkReachability.TryGetFlags(out flags))
return false; return IsReachableWithoutRequiringConnection(flags);
} public static bool IsReachableWithoutRequiringConnection(NetworkReachabilityFlags flags)
{
// Is it reachable with the current network configuration?
bool isReachable = (flags & NetworkReachabilityFlags.Reachable) != ; // Do we need a connection to reach it?
bool noConnectionRequired = (flags & NetworkReachabilityFlags.ConnectionRequired) == ; // Since the network stack will automatically try to get the WAN up,
// probe that
if ((flags & NetworkReachabilityFlags.IsWWAN) != )
noConnectionRequired = true; return isReachable && noConnectionRequired;
} private bool InternetConnectionStatus()
{
NetworkReachabilityFlags flags;
bool defaultNetworkAvailable = IsNetworkAvailable(out flags);
if (defaultNetworkAvailable && ((flags & NetworkReachabilityFlags.IsDirect) != ))
{
return false;
}
else if ((flags & NetworkReachabilityFlags.IsWWAN) != )
{
return true;
}
else if (flags == )
{
return false;
} return true;
} private bool LocalWifiConnectionStatus()
{
NetworkReachabilityFlags flags;
if (IsAdHocWiFiNetworkAvailable(out flags))
{
if ((flags & NetworkReachabilityFlags.IsDirect) != )
return true;
}
return false;
} #endregion #region 方式二 #endregion
}
}

IOS

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

  1. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  2. VMware中安装CentOS7网络配置静态IP地址,常用配置和工具安装

    VMware中安装CentOS7网络配置静态IP地址,常用配置和工具安装在阿里云开源镜像地址下载镜像Index of /centos/7.2.1511/isos/x86_64/http://mirro ...

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

    Java语言的优势之一是Java程序能访问网络资源.Java提供一系列的类支持Java程序访问网络资源. TCP/IP协议和IP地址 为了进行网络通信,通信双方必须遵守通信协议.目前最广泛使用的是TC ...

  4. 网络基础之IP地址与子网划分

    IP地址 Ipv4地址格式:点分十进制 IP地址的分类 A类 B类 C类: D类:组播 E类: 公共IP地址 私有IP地址 特殊地址 保留地址 子网掩码 什么是子网掩码 CIDR表示法 子网划分 为啥 ...

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

    IP地址 IP是英文Internet Protocol的缩写,意思是"网络之间互连的协议",也就是为计算机网络相互连接进行通信而设计的协议.在因特网中,它是能使连接到网上的所有计算 ...

  6. linux 网络基础之IP地址

    IP是英文Internet Protocol的缩写,意思是“网络之间互连的协议”,也就是为计算机网络相互连接进行通信而设计的协议. IP地址类型分为:公有地址.私有地址. 公有地址 公有地址(Publ ...

  7. 网络协议 2 - IP 地址和 MAC 地址

    了解完网络协议,我们会发现,网络通信的五层模型里,有两个很重要的概念:IP 地址和 MAC 地址. 那么 IP 地址是怎么来的,又是怎么没的?MAC 地址与 IP 地址又有什么区别? 这回答上面问题前 ...

  8. 网络基础之IP地址

    一.IP地址 1.IP地址就是给互联网上每一台主机 (或路由器)每一个接口分配一个在全世界范围内是唯一的32位二进制的地址标识符.现在由互联网名字和数字分配机构ICANN进行分配. 2.转换成十进制 ...

  9. 计算机网络-4-1-2-分类的IP地址

    有关IP最重要的文档就是互联网的正式标准RFC 791 IP地址及其表示方法 整个互联网就是一个单一,抽象的网络,IP地址就是给互联网上的每一台主机(或者路由器)的每一个接口分配一个在全世界范围内都是 ...

随机推荐

  1. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  2. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

  3. ASP.NET Aries 入门开发教程3:开发一个列表页面及操控查询区

    前言: Aries框架毕竟是开发框架,所以重点还是要写代码的,这样开发人员才不会失业,哈. 步骤1:新建html 建一个Html,主要有三步: 1:引入Aries.Loader.js 2:弄一个tab ...

  4. 我为NET狂官方面试题-数据库篇

    求结果:select "1"? 查找包含"objs"的表?查找包含"o"的数据库? 求今天距离2002年有多少年,多少天? 请用一句SQL获 ...

  5. gradle学习笔记(1)

    1. 安装     (1) 下载最新gradle压缩包,解压到某处.地址是:Gradle web site:     (2) 添加环境变量:             1) 变量名:GRADLE_HOM ...

  6. 问题记录:EntityFramework 一对一关系映射

    EntityFramework 一对一关系映射有很多种,比如主键作为关联,配置比较简单,示例代码: public class Teacher { public int Id { get; set; } ...

  7. 关于CSS inline-block、BFC以及外边距合并的几个小问题

    CSS inline-block和BCF对于初学者来说,总是弄不太明白,下面记录下我在学习这块知识的过程中遇到的几个问题,供大家参考,有不足的地方,欢迎大家批评指正. 一.在什么场景下会出现外边距合并 ...

  8. Oracle常用SQL函数整理

    --返回ASCII码select  ASCII('A') "A的ASCII码" ,ASCII('a') "a的ASSCII码" from dual ; --反向 ...

  9. #26 fibonacci seqs

    Difficulty: Easy Topic: Fibonacci seqs Write a function which returns the first X fibonacci numbers. ...

  10. Apache2.4:AH01630 client denied by server configuration

    问题说明:Apache服务总共有4个,是为了防止单点故障和负载均衡,负载均衡控制由局方的F5提供. 访问的内容在NAS存储上,现象是直接访问每个apache的服务内容都是没有问题,但是从负载地址过来的 ...