2013-10-12 2 views
3

Я знаком с классом «достижимости», чтобы проверить, есть ли подключение к Интернету: https://github.com/xamarin/monotouch-samples/blob/master/ReachabilitySample/reachability.csMonoTouch - Получение уведомления, когда состояние сети изменилось

мне теперь интересно, есть ли способ, чтобы получить уведомление, когда Состояние сети изменилось? Предположим, что моя коллекция загружена, когда нет Интернета. Изображения не загружаются. Я бы хотел снова запустить загрузку, если iPad внезапно снова подключится к Интернету.

В классе достижимости, я вижу следующий код:

public static event EventHandler ReachabilityChanged; 

    static void OnChange (NetworkReachabilityFlags flags) 
    { 
     var h = ReachabilityChanged; 
     if (h != null) 
      h (null, EventArgs.Empty); 
    } 

Однако, если я поставил точку останова в методе «OnChange», это не называется, когда я выключаю Wi-Fi.

Любые идеи?

С уважением, Matt

ответ

6

Хорошо, я должен был найти ответ сам на самом деле.

Вы должны вызвать следующие функции первыми, прежде чем вы будете уведомлены:

Reachability.InternetConnectionStatus(); 
Reachability.LocalWifiConnectionStatus(); 
Reachability.RemoteHostStatus(); 

Вызов этих 3 статических вызовов функций будут инициализировать все необходимые объекты. Эти 3 объекта получат уведомление, когда произойдут изменения, и вызовите «OnChange» в вызове Reachability (который уведомляет вашего обработчика событий).

(от курса, даже лучше создать специальную функцию, которая инициализирует все необходимые объекты, так что вам не нужно называть эти 3 функции, как они будут действительно проверить подключение к сети уже)

+0

классный человек :), отлично работает – arthankamal

2

Вы должны быть в состоянии просто добавить обработчик события к событию ReachabilityChanged, что-то типа этого (не тест составлен);

Reachability.ReachabilityChanged += c_ReachabilityChanged; 

static void c_ReachabilityChanged(object sender, EventArgs e) 
{ 
    Console.WriteLine("Here I can handle that network reachability changed."); 
} 
+0

Я знаю, как добавьте обработчик событий, но точка останова никогда не вызывается в «OnChange», поэтому она также не вызывает события. Я тестирую его на симуляторе, отключив Wi-Fi моего ноутбука и устройства, запустив приложение, выбрав настройки, чтобы отключить Wi-Fi и вернуться в приложение. Я не уверен, что мой тестовый сценарий хорош. – Matt

+0

@Matt Извините, неправильно понял то, что вы просили, возможно, и отключить ноутбук _should_ для тестирования. Если этот класс не будет работать для вас, вы можете [зарегистрировать широковещательный приемник] (http://fizzylogic.nl/2013/08/17/xamarin-android-by-example-monitoring-the-network-status/) для контроля состояния сети. –

+0

Не удивил, что вы это неправильно поняли, потому что мои слова были немного запутанными (я изменил это) относительно события. Ссылка, которую вы предоставили, предназначена для Android (monodroid), а не для iOS (monotouch). В любом случае, я добавил ссылку на вашу ссылку, потому что я могу использовать ее, если я когда-либо переношу свое приложение на Android :-) – Matt

Смежные вопросы