2015-10-26 2 views
7

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

+0

поиск, прежде чем спросить. см. [this] (https://developer.xamarin.com/recipes/ios/network/reachability/detect_if_network_is_available/) –

ответ

1

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

NetworkStatus internetStatus = Reachability.InternetConnectionStatus(); 

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

не может решить DLL класса возвращаемости? –

8

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

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

Тогда в вашей деятельности (в 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(). Очень просто.

1

Вы можете использовать плагин 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; 
+0

нет учебника о том, как попробовать его для тех, кто является новичком в xamarin. –