Xamarin.Forms判断网络连接情况

原创 2017年07月30日 00:27:11

    大家好,这次给大家介绍Xamarin.Forms底下跨平台接口的实现。为什么要做跨平台的接口呢,我目前总结有两种情况:1.有些功能在分平台底下需求不一样,这时需要在分平台底下实现各自的功能,比如Device.OnPlatform可以设置分平台底下实现不同方法;2.有些功能在可移植平台底下无法实现,需要在分平台底下实现,比如吐司,ZXing扫码等。


    在做天气预报app时发现,请求xml数据时网络没连接,如果没有相应的处理,就会强退,这对于用户体验肯定是不好的,为此,我上网搜了一下资料,看了下Java代码的实现方式:


    1.获取网络信息需要在AndroidManifest.xml文件中加入相应的权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    2.实现代码:

//判断是否有网络连接
public boolean isNetworkConnected(Context context) { 
if (context != null) { 
ConnectivityManager mConnectivityManager = (ConnectivityManager) context 
.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo(); 
if (mNetworkInfo != null) { 
return mNetworkInfo.isAvailable(); 
} 
} 
return false; 
}

//判断是否有WIFI连接
public boolean isWifiConnected(Context context) { 
if (context != null) { 
ConnectivityManager mConnectivityManager = (ConnectivityManager) context 
.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo mWiFiNetworkInfo = mConnectivityManager 
.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
if (mWiFiNetworkInfo != null) { 
return mWiFiNetworkInfo.isAvailable(); 
} 
} 
return false; 
}

//判断Mobile网络是否可用
public boolean isMobileConnected(Context context) { 
if (context != null) { 
ConnectivityManager mConnectivityManager = (ConnectivityManager) context 
.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo mMobileNetworkInfo = mConnectivityManager 
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
if (mMobileNetworkInfo != null) { 
return mMobileNetworkInfo.isAvailable(); 
} 
} 
return false; 
}

    有了上面的代码,就可以实现在Xamarin.Forms环境下实现判断网络是否可用,当然不是照搬上面的代码,下面来讲解具体的实现步骤:

1.AndroidManifest.xml文件中加入相应的权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

2.在可移植平台底下创建跨平台接口:

这里写图片描述

3.在分平台底下底下创建类,实现接口:

3.1 在MainActivity底下定义Context:

这里写图片描述

3.2 实现接口:

这里写图片描述
    下面是接口具体实现代码:

[assembly:Dependency(typeof(DemoWeather.Droid.IfNetWork.JudgeNet))]
namespace DemoWeather.Droid.IfNetWork
{
    public class JudgeNet:IJudgeNetWorks
    {

        public bool IsNetWorkConnected()
        {
            ConnectivityManager manager = ConnectivityManager.FromContext(MainActivity.AppContext);
            NetworkInfo info = manager.ActiveNetworkInfo;
            if (info!=null)
            {
                return info.IsAvailable;
            }
            return false;
        }

        public bool IsWifiConnected()
        {
            ConnectivityManager manager = ConnectivityManager.FromContext(MainActivity.AppContext);
            NetworkInfo info = manager.GetNetworkInfo(ConnectivityType.Wifi);
            if (info!=null)
            {
                return info.IsAvailable;
            }
            return false;
        }

        public bool IsMobileConnected()
        {
            ConnectivityManager manager = ConnectivityManager.FromContext(MainActivity.AppContext);
            NetworkInfo info = manager.GetNetworkInfo(ConnectivityType.Mobile);
            if (info!=null)
            {
                return info.IsAvailable;
            }
            return false;
        }
    }
}

    [assembly:Dependency(typeof(DemoWeather.Droid.IfNetWork.JudgeNet))]的作用是将该类依赖于程序集,以便在可移植平台底下实例化接口。


    IOS底下也是类似,不过本人手机是安卓的,没有IOS运行环境,这边就不涉及了。


4. 在可移植平台底下调用:

4.1 实例化接口:

这里写图片描述

4.2 调用接口:

这里写图片描述


    这样的实现方式很多地方会用到,比如在可移植平台底下调用分平台的吐司提示,MD5加密等。


    好了,本次的内容就到这里,有问题的码农们可以联系我的QQ:1405999864,拜拜~

判断网络连接情况

很多情况下会用到这个功能,距离来说现在比较火的微视,有一个功能就是在WiFi环境下自动播放微视,而在3G环境下则需要用户点击才会开始播放. 包括在线音频,视频或者包含大量图片的应用都可以通过这个功能...
  • nestor_me
  • nestor_me
  • 2014年03月02日 21:16
  • 1422

Android 判断网络连接情况

通过以下代码可在Android中判断网络连接情况:ConnectivityManager manager = (ConnectivityManager) context.getSystemServic...
  • tianbianlan
  • tianbianlan
  • 2015年07月19日 09:47
  • 244

xamarin.forms 网络连接检测及网络状态判断案例

AndroidManifest.xml文件中加入相应的权限: uses-permission android:name="android.permission.ACCESS_NETWORK_STA...
  • u014461701
  • u014461701
  • 2017年09月20日 16:15
  • 166

Objective-C用reachability判断当前网络类型

开发中时常需要判断当前的网络类型,根据不同的类型来做不同的操作。我们可以把这些时常用得到方法写到一个工具类里面。 首先定义一个结构体:typedef enum { NetWorkType_N...
  • liu1347508335
  • liu1347508335
  • 2016年03月08日 09:33
  • 1748

使用java检测网络连接状况

windows中可以通过在cmd中使用ping命令来检测网络连接状况,如下: 网络连接正常时: 网络未连接时: 在java中可以通过调用ping命令来判断网络是否连接正常...
  • u012116457
  • u012116457
  • 2015年06月01日 20:46
  • 4644

Android 的网络判定(网络连接类型和监听网络连接变化)

现在,Android手机作为市场占有量最大的移动设备,拥有着无数的需要连接网络的App,同时人们也渐渐不能离开需要网络的生活,相信大家都知道,在一些IMApp,类似于QQ,Wechat等通信工具中,并...
  • gongzhiyao3739124
  • gongzhiyao3739124
  • 2016年10月14日 20:03
  • 3643

objective-c检测网络状态

Reachability *r = [Reachability reachabilityWithHostName:@"www.apple.com"]; switch ([r currentRe...
  • wzq9706
  • wzq9706
  • 2013年09月24日 15:27
  • 2298

Xamarin.Forms入门困扰与解决方式-第三篇

有时候因应美工的需要,需要用底图搭配控制项来达到漂亮的外观,但是控制项自带的样式常常会抵触美工的设计,例如想要去除输入框自带的框线时,会发现Xamarin.Forms中的控制项可以变化外观的属性很少,...
  • Thinkpower_Support
  • Thinkpower_Support
  • 2015年03月10日 15:09
  • 1116

android开发判断手机网络连接状态

android开发中经常会用到判断手机网络状态的功能,android系统本身会提供各种服务供我们来监测手机的系统状态,当某一种服务的状态的发生改变的时候也会发送一条默认的广播。那么我们就可以拿到系统所...
  • hnzcdy
  • hnzcdy
  • 2016年04月07日 10:24
  • 2020

CentOS最小化安装下连接网络设置

CentOS6.3最小化安装连接网络设置: 由于最小化安装,所以网卡没有开机启动。我们只要编辑下网卡配置文件即可。 [root@localhost ~]# cd /etc/sysconfig/ne...
  • mr_von1024
  • mr_von1024
  • 2013年01月17日 15:11
  • 457
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Xamarin.Forms判断网络连接情况
举报原因:
原因补充:

(最多只允许输入30个字)