Я работаю над Xamarin Android Application. Прежде чем перейти к следующему фрагменту, я хочу проверить Интернет-соединение и сообщить об этом пользователю? Как это реализовать? И как обновить весь фрагмент после того, как пользователь включил Интернет?
Любые советы или предложения будут оценены!

9
Dhruv Gohil 26 Окт 2015 в 13:05

3 ответа

Лучший ответ

Попробуй это :

NetworkStatus internetStatus = Reachability.InternetConnectionStatus();

if(!Reachability.IsHostReachable("http://google.com")) {
    // Put alternative content/message here
}
else
{
    // Put Internet Required Code here
}
0
Jas 26 Окт 2015 в 10:17

Вы можете использовать плагин 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; 
4
LDut 29 Окт 2015 в 12:38

Чтобы получить статус сети, вы можете использовать следующий метод в своей деятельности:

 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);
    }
}

Затем в своей деятельности (например, в методе 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 (когда пользователь включает трафик данных или соединение Wi-Fi). Затем вы перехватываете это событие и проверяете наличие сети. статус с помощью метода IsOnline(). Очень просто.

13
a.toraby 27 Ноя 2018 в 07:20