在 Xamarin 中检查 Internet 是打开还是关闭 Android
Check whether Internet is on or off in Xamarin Android
我正在研究 Xamarin Android Application.Before 继续我的下一个片段我想检查 Internet 连接 并通知用户吗?我该如何实现?以及如何在用户打开互联网后刷新整个片段?
任何意见或建议将不胜感激!
试试这个:
NetworkStatus internetStatus = Reachability.InternetConnectionStatus();
if(!Reachability.IsHostReachable("http://google.com")) {
// Put alternative content/message here
}
else
{
// Put Internet Required Code here
}
要获取网络状态,您可以在 activity 中使用以下方法:
public bool IsOnline()
{
var cm = (ConnectivityManager)GetSystemService(ConnectivityService);
return cm.ActiveNetworkInfo == null ? false : cm.ActiveNetworkInfo.IsConnected;
}
如果我从这句话对你的理解是正确的:And how to refresh whole fragment after user switch-on the internet
,你想要检测,每当连接状态发生任何变化,因此你绝对需要使用broadcast receivers。
首先,您应该使用名为 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);
}
}
然后在你的 activity 中(例如在 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 插件: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 Android Application.Before 继续我的下一个片段我想检查 Internet 连接 并通知用户吗?我该如何实现?以及如何在用户打开互联网后刷新整个片段?
任何意见或建议将不胜感激!
试试这个:
NetworkStatus internetStatus = Reachability.InternetConnectionStatus();
if(!Reachability.IsHostReachable("http://google.com")) {
// Put alternative content/message here
}
else
{
// Put Internet Required Code here
}
要获取网络状态,您可以在 activity 中使用以下方法:
public bool IsOnline()
{
var cm = (ConnectivityManager)GetSystemService(ConnectivityService);
return cm.ActiveNetworkInfo == null ? false : cm.ActiveNetworkInfo.IsConnected;
}
如果我从这句话对你的理解是正确的:And how to refresh whole fragment after user switch-on the internet
,你想要检测,每当连接状态发生任何变化,因此你绝对需要使用broadcast receivers。
首先,您应该使用名为 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);
}
}
然后在你的 activity 中(例如在 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 插件:Connectivity
它将公开一个布尔值
/// <summary>
/// Gets if there is an active internet connection
/// </summary>
bool IsConnected { get; }
和一个改变状态的代表
/// <summary>
/// Event handler when connection changes
/// </summary>
event ConnectivityChangedEventHandler ConnectivityChanged;