Xamarin.Forms判断网络连接情况

    大家好,这次给大家介绍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,拜拜~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值