Проверьте, включен ли Интернет в Xamarin Android.

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


person Dhruv Gohil    schedule 26.10.2015    source источник
comment
ищите, прежде чем спрашивать. см. это   -  person Kishore Jethava    schedule 26.10.2015


Ответы (3)


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

NetworkStatus internetStatus = Reachability.InternetConnectionStatus();

if(!Reachability.IsHostReachable("http://google.com")) {
    // Put alternative content/message here
}
else
{
    // Put Internet Required Code here
}
person Jas    schedule 26.10.2015
comment
Класс достижимости не существует в текущем контексте! - person Mohamad Mousheimish; 16.10.2019

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

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

person a.toraby    schedule 27.10.2015
comment
Компилятор говорит, что new IntentFilter(ConnectivityManager.ConnectivityAction)); устарел! - person Sayed Muhammad Idrees; 24.10.2019

Вы можете использовать подключаемый модуль MVVMCross: Подключение

Это выставит логическое значение

/// <summary>
/// Gets if there is an active internet connection
/// </summary>
bool IsConnected { get; }

и делегат на изменение состояния

/// <summary>
/// Event handler when connection changes
/// </summary>
event ConnectivityChangedEventHandler ConnectivityChanged; 
person LDut    schedule 29.10.2015
comment
нет учебника о том, как попробовать его для тех, кто новичок в xamarin. - person Maxime Claude; 24.11.2016
comment
Вышеупомянутая библиотека подключения хороша, но у нее были проблемы с совместимостью с несколькими устройствами, вам нужно убедиться, что она хорошо поддерживается на других устройствах. - person Mohsin khan; 03.05.2018