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
risposta
Prova questo:
NetworkStatus internetStatus = Reachability.InternetConnectionStatus();
if(!Reachability.IsHostReachable("http://google.com")) {
// Put alternative content/message here
}
else
{
// Put Internet Required Code here
}
non è in grado di risolvere la dll di classe Reachability? –
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.
È 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;
no tutorial su come provarlo per qualcuno che è un principiante in xamarin. –
di ricerca prima di chiedere. vedere [questo] (https://developer.xamarin.com/recipes/ios/network/reachability/detect_if_network_is_available/) –