在Xamarin Android中检查互联网连接是否开启或关闭

9

我正在开发Xamarin Android应用程序。在进入下一个片段之前,我想检查网络连接并通知用户?我该如何实现?用户打开互联网后如何刷新整个片段?
欢迎提供任何建议或建议!


在提问之前请先搜索。参见此链接 - Kishore Jethava
3个回答

13

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

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

如果我正确理解了你在这句话中的意思:如何在用户打开互联网后刷新整个片段,那么你想要检测连接状态发生的任何更改,因此你绝对需要使用广播接收器

首先,你应该实现一个带有简单事件名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);
    }
}

那么在你的活动中(例如在OnCreate()方法中,这并不重要),创建该接收器的一个实例并注册它:

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

var _broadcastReceiver = new NetworkStatusBroadcastReceiver();
_broadcastReceiver.ConnectionStatusChanged += OnNetworkStatusChanged;
Application.Context.RegisterReceiver(_broadcastReceiver, 
new IntentFilter(ConnectivityManager.ConnectivityAction));

以下是事件处理程序的主体:

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

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


编译器说 new IntentFilter(ConnectivityManager.ConnectivityAction)); 已经过时了! - Sayed Muhammad Idrees

4
您可以使用MVVMCross插件:Connectivity。它会暴露一个布尔值。
/// <summary>
/// Gets if there is an active internet connection
/// </summary>
bool IsConnected { get; }

并且一个委托在状态改变时

/// <summary>
/// Event handler when connection changes
/// </summary>
event ConnectivityChangedEventHandler ConnectivityChanged; 

不提供适用于 Xamarin 初学者的尝试教程,仅返回翻译后的文本。 - Maxime Claude
以上这个连接库很好,但是它存在一些兼容性问题,你需要确保它在其他设备上的支持良好。 - Mohsin khan

0

试试这个:

NetworkStatus internetStatus = Reachability.InternetConnectionStatus();

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

当前上下文中不存在可达性类! - Mohamad Mousheimish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接