Проверьте, включен или выключен интернет в Xamarin Android
Я работаю над приложением Xamarin для Android.Прежде чем перейти к следующему фрагменту, я хочу проверить Интернет и сообщить об этом пользователю ? Как я могу это реализовать ?И как обновить весь фрагмент после включения пользователя в сети?
Любые советы или предложения будут оценены !
3 ответов
попробуйте это :
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;
}
если я правильно понял вас из этого предложения: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);
}
}
затем в активность (in 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; }
и делегат на изменение состояния
/// <summary>
/// Event handler when connection changes
/// </summary>
event ConnectivityChangedEventHandler ConnectivityChanged;