Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查Xamarin Android中的Internet是否打开或关闭_Android_Xamarin_Mvvmcross_Internet Connection - Fatal编程技术网

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

检查Xamarin Android中的Internet是否打开或关闭,android,xamarin,mvvmcross,internet-connection,Android,Xamarin,Mvvmcross,Internet Connection,我正在开发Xamarin Android应用程序。在继续我的下一个片段之前,我想检查互联网连接,并通知用户相关信息?我该如何实现这一点?以及在用户切换到internet后如何刷新整个片段? 任何意见或建议将不胜感激 试试这个: NetworkStatus internetStatus = Reachability.InternetConnectionStatus(); if(!Reachability.IsHostReachable("http://google.com")) { //

我正在开发Xamarin Android应用程序。在继续我的下一个片段之前,我想检查互联网连接,并通知用户相关信息?我该如何实现这一点?以及在用户切换到internet后如何刷新整个片段?
任何意见或建议将不胜感激

试试这个:

NetworkStatus internetStatus = Reachability.InternetConnectionStatus();

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

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

 public bool IsOnline()
    {
        var cm = (ConnectivityManager)GetSystemService(ConnectivityService);
        return cm.ActiveNetworkInfo == null ? false : cm.ActiveNetworkInfo.IsConnected;
    }
如果我从这句话中正确理解了您的意思:
以及如何在用户打开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);
    }
}
然后在活动中(例如,在
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()
方法检查网络状态。非常简单。

您可以使用MVVMCross插件:

它将公开一个布尔值

/// <summary>
/// Gets if there is an active internet connection
/// </summary>
bool IsConnected { get; }
//
///获取是否存在活动的internet连接
/// 
布尔断开连接{get;}
以及更改状态的委托

/// <summary>
/// Event handler when connection changes
/// </summary>
event ConnectivityChangedEventHandler ConnectivityChanged; 
//
///连接更改时的事件处理程序
/// 
事件connectivitychangedventhandler ConnectivityChanged;

询问前先搜索。没有关于如何为xamarin初学者尝试的教程。上面的连接性库很好,但它有几个设备兼容性问题,您需要确保它在其他设备上支持良好。可达性类在当前上下文中不存在!编译器说
newintentfilter(ConnectivityManager.ConnectivityAction))已去润滑!