Я работаю над приложениями Xamarin для Android. Прежде чем перейти к следующему фрагменту, я хочу проверить Подключение к Интернету и сообщить об этом пользователю? Как я могу реализовать это? И как обновить весь фрагмент после включения пользователя в Интернет?
Любые советы или предложения будут оценены!Проверьте, включен ли Интернет в Xamarin Android
ответ
Попробуйте это:
NetworkStatus internetStatus = Reachability.InternetConnectionStatus();
if(!Reachability.IsHostReachable("http://google.com")) {
// Put alternative content/message here
}
else
{
// Put Internet Required Code here
}
не может решить DLL класса возвращаемости? –
Чтобы получить статус сети можно использовать следующий метод в деятельности:
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()
. Очень просто.
Вы можете использовать плагин 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;
нет учебника о том, как попробовать его для тех, кто является новичком в xamarin. –
поиск, прежде чем спросить. см. [this] (https://developer.xamarin.com/recipes/ios/network/reachability/detect_if_network_is_available/) –