检查Xamarin Android中的Internet是打开还是关闭

Dhr*_*hil 8 android internet-connection mvvmcross xamarin

我正在研究Xamarin Android Application.在继续我的下一个片段之前,我想检查一下Internet Connection并通知用户它?我该如何实现?以及如何在用户开启互联网后刷新整个片段?
任何建议或意见将不胜感激!

a.t*_*aby 12

要获取网络状态,您可以在活动中使用以下方法:

 public bool IsOnline()
    {
        var cm = (ConnectivityManager)GetSystemService(ConnectivityService);
        return cm.ActiveNetworkInfo == null ? false : cm.ActiveNetworkInfo.IsConnected;
    }
Run Code Online (Sandbox Code Playgroud)

如果我从这句话中正确地理解你:And how to refresh whole fragment after user switch-on the internet你想要检测,无论何时发生连接状态的任何变化,你都绝对需要使用广播接收器.

首先,您应该使用一个名为ConnectionStatusChanged如下的简单事件来实现广播接收器:

[BroadcastReceiver()]
public class NetworkStatusBroadcastReceiver : BroadcastReceiver
{

    public event EventHandler ConnectionStatusChanged;

    public override void OnReceive(Context context, Intent intent)
    {
        if (ConnectionStatusChanged != null)
            ConnectionStatusChanged(this, EventArgs.Empty);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的活动中(OnCreate()例如,在方法中,无关紧要)创建该接收器的实例并注册它:

var _broadcastReceiver = new NetworkStatusBroadcastReceiver();
_broadcastReceiver.ConnectionStatusChanged += OnNetworkStatusChanged;
Application.Context.RegisterReceiver(_broadcastReceiver, 
new IntentFilter(ConnectivityManager.ConnectivityAction));
Run Code Online (Sandbox Code Playgroud)

这是事件处理程序的主体:

private void OnNetworkStatusChanged(object sender, EventArgs e)
    {
       if(IsOnline()){
        Toast.MakeText(this, "Network Activated", ToastLength.Short).Show();
        // refresh content fragment.
       }
    }
Run Code Online (Sandbox Code Playgroud)

简而言之,NetworkStatusBroadcastReceiver接收设备网络状态的任何变化并调用ConnectionStatusChanged(当用户启用数据流量或WiFi连接时),然后捕获该事件并使用IsOnline()方法检查网络状态.非常简单.


Jas*_*Jas 0

尝试这个 :

NetworkStatus internetStatus = Reachability.InternetConnectionStatus();

if(!Reachability.IsHostReachable("http://google.com")) {
    // Put alternative content/message here
}
else
{
    // Put Internet Required Code here
}
Run Code Online (Sandbox Code Playgroud)