Monotouch - Mendapatkan pemberitahuan ketika status jaringan berubah

Saya familiar dengan kelas "reachability" untuk memeriksa apakah ada koneksi internet: https://github.com/xamarin/monotouch-samples/blob/master/ReachabilitySample/reachability.cs

Saya sekarang bertanya-tanya apakah ada cara untuk mendapatkan pemberitahuan ketika status Jaringan telah berubah? Katakanlah koleksi saya dimuat ketika tidak ada internet. Gambar tidak akan dimuat. Saya ingin memicu pengunduhan lagi jika iPad tiba-tiba mendapat koneksi internet lagi.

Di kelas keterjangkauan, saya melihat kode berikut:

public static event EventHandler ReachabilityChanged;

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

Namun, jika saya menetapkan breakpoint dalam metode "OnChange", itu tidak dipanggil ketika saya mematikan Wifi.

Ada ide?

Salam, Mat


person Matt    schedule 12.10.2013    source sumber


Jawaban (3)


Oke, sebenarnya saya seharusnya menemukan jawabannya sendiri.

Anda harus memanggil fungsi berikut terlebih dahulu sebelum Anda diberi tahu:

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

Memanggil 3 panggilan fungsi statis ini akan menginisialisasi semua objek yang diperlukan. Ketiga objek tersebut akan mendapat notifikasi ketika ada perubahan dan memanggil "OnChange" di panggilan Reachability (yang memberi tahu Event Handler Anda).

(tentu saja, yang lebih baik lagi adalah membuat fungsi khusus yang menginisialisasi semua objek yang diperlukan sehingga Anda tidak perlu memanggil 3 fungsi ini karena fungsi tersebut sudah benar-benar menguji koneksi jaringan)

person Matt    schedule 12.10.2013

Anda seharusnya bisa menambahkan event handler ke event ReachabilityChanged, seperti (yang bukan tes yang dikompilasi);

Reachability.ReachabilityChanged += c_ReachabilityChanged;

static void c_ReachabilityChanged(object sender, EventArgs e)
{
    Console.WriteLine("Here I can handle that network reachability changed.");
}
person Joachim Isaksson    schedule 12.10.2013
comment
Saya tahu cara menambahkan Event Handler, tetapi breakpoint tidak pernah dipanggil di OnChange, sehingga juga tidak akan memicu Event. Saya mengujinya di simulator dengan mematikan Wifi laptop saya dan di perangkat dengan meluncurkan aplikasi, masuk ke pengaturan untuk mematikan Wifi dan kembali ke aplikasi. Saya tidak yakin apakah skenario pengujian saya bagus. - person Matt; 12.10.2013
comment
@Matt Maaf, mungkin salah memahami apa yang Anda tanyakan, dan melepaskan sambungan laptop seharusnya berfungsi untuk pengujian. Jika kelas itu tidak cocok untuk Anda, Anda dapat daftarkan penerima siaran untuk memantau status jaringan. - person Joachim Isaksson; 12.10.2013
comment
Tidak heran jika Anda salah paham, karena kata-kata saya agak membingungkan (saya ubah) mengenai Acara tersebut. Tautan yang Anda berikan adalah untuk Android (monodroid), bukan untuk iOS (monotouch). Saya tetap menandai tautan Anda, karena saya dapat menggunakannya jika saya ingin mem-porting aplikasi saya ke Android :-) - person Matt; 12.10.2013
comment
@Matt Bagus Anda menemukan solusinya, dan saya harus berhenti memposting jawaban saat memasak agar tidak terlalu bingung;) - person Joachim Isaksson; 13.10.2013

Memanggil saja ini akan berhasil, dapat ditulis di AppDelegate

Reachability.RemoteHostStatus ();

Reachability.ReachabilityChanged += ReachabilityChanged;

static void ReachabilityChanged(object sender, EventArgs e){//Do Something};
person Maddiee    schedule 13.07.2019