2015-10-26 11 views
7

Sto lavorando su Xamarin Android Application. Prima di procedere al mio prossimo frammento voglio verificare la connessione Internet e informare l'utente su di esso? Come posso implementarlo? E come aggiornare l'intero frammento dopo che l'utente ha acceso Internet?
Qualsiasi consiglio o suggerimento sarà apprezzato!Verificare se Internet è acceso o spento in Xamarin Android

+0

di ricerca prima di chiedere. vedere [questo] (https://developer.xamarin.com/recipes/ios/network/reachability/detect_if_network_is_available/) –

risposta

1

Prova questo:

NetworkStatus internetStatus = Reachability.InternetConnectionStatus(); 

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

non è in grado di risolvere la dll di classe Reachability? –

8

Per ottenere lo stato della rete è possibile utilizzare il seguente metodo nella vostra attività:

public bool IsOnline() 
    { 
     var cm = (ConnectivityManager)GetSystemService(ConnectivityService); 
     return cm.ActiveNetworkInfo == null ? false : cm.ActiveNetworkInfo.IsConnected; 
    } 

Se ho capito bene da questa frase: And how to refresh whole fragment after user switch-on the internet, Volete rilevare, ogni volta che si verificano cambiamenti nello stato della connessione, quindi è assolutamente necessario utilizzare broadcast receivers.

Prima di tutto è necessario implementare un ricevitore di broadcast con un semplice evento denominato ConnectionStatusChanged come segue:

[BroadcastReceiver()] 
public class NetworkStatusBroadcastReceiver : BroadcastReceiver 
{ 

    public event EventHandler ConnectionStatusChanged; 

    public override void OnReceive(Context context, Intent intent) 
    { 
     if (ConnectionStatusChanged != null) 
      ConnectionStatusChanged(this, EventArgs.Empty); 
    } 
} 

Poi nella vostra attività (in OnCreate() metodo per esempio, non importa) creare un'istanza di che il ricevitore e registrarlo:

var _broadcastReceiver = new NetworkStatusBroadcastReceiver(); 
_broadcastReceiver.ConnectionStatusChanged += OnNetworkStatusChanged; 
Application.Context.RegisterReceiver(_broadcastReceiver, 
new IntentFilter(ConnectivityManager.ConnectivityAction)); 

Ecco il corpo del gestore di eventi:

private void OnNetworkStatusChanged(object sender, EventArgs e) 
    { 
     if(IsOnline){ 
     Toast.MakeText(this, "Network Activated", ToastLength.Short).Show(); 
     // refresh content fragment. 
     } 
    } 

Per ridurre la storia breve, NetworkStatusBroadcastReceiver riceve qualsiasi modifica nello stato di rete del dispositivo e richiama il ConnectionStatusChanged (quando l'utente attiva il traffico dati o la connessione WiFi), quindi rileva tale evento e controlla lo stato della rete utilizzando il metodo IsOnline(). Molto semplice.

1

È possibile utilizzare il plugin MVVMCross: Connectivity

Si wil esporre un valore booleano

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

e un delegato sullo stato cambiamento

/// <summary> 
/// Event handler when connection changes 
/// </summary> 
event ConnectivityChangedEventHandler ConnectivityChanged; 
+0

no tutorial su come provarlo per qualcuno che è un principiante in xamarin. –