網路狀態的實時監聽

2021-09-23 22:29:30 字數 3257 閱讀 2821

前言:最近公司專案重構,為了提高使用者的體驗,專案中要求新增當前網路狀態的實時監聽,以便在無網路狀態時給使用者友好的提醒並修改ui介面。本文將介紹使用四大元件之一的broadcastreceiver實現全域性的網路狀態監聽,使用動態方式註冊。

broadcastreceiver的註冊方式:

(1)動態註冊:即在**中使用registerreceiver()方法進行註冊,動態註冊需要在onpause或ondestory方法中反註冊,不然會出現洩露。

效果圖:

1.定義網路狀態監聽介面及方法?

/**

* 網路狀態型別改變的監聽介面

*/

publicinte***cenetstatusmonitor

/**

* 設定網路狀態監聽介面

*/

publicvoidsetstatusmonitor(netstatusmonitor netstatusmonitor)

2.網路狀態工具類?

/**

* created by ruancw on 2018/5/27.

* 網路狀態工具類

*/

publicclassnetutilelse

}

}

3.定義netbroadcastreceiver

netbroadcastreceiver繼承自broadcastreceiver,並重寫onreceive方法?

/**

* created by ruancw on 2018/5/27.

*/

publicclassnetbroadcastreceiverextendsbroadcastreceiver

}

/**

* 網路狀態型別改變的監聽介面

*/

publicinte***cenetstatusmonitor

/**

* 設定網路狀態監聽介面

*/

publicvoidsetstatusmonitor(netstatusmonitor netstatusmonitor)

}

4.baseactivity中註冊

(1)baseactivity實現網路狀態監聽介面

(2)onresume中註冊廣播?

@override

protectedvoidonresume()?

/**

* 註冊網路狀態廣播

*/

privatevoidregisterbroadcastreceiver()

}

(3)onpause或ondestory中取消註冊?

@override

protectedvoidondestroy()

}

(4)重寫網路監聽介面方法?

@override

publicvoidonnetchange(booleannetstatus)?

/**

* 監聽網路狀態做出相應改變

*/

privatevoidisnetconnect()else

}

(5)主線程修改ui?

@suppresslint("handlerleak")

handler handler =newhandler()else

}

};

這樣就實現了全域性網路狀態監聽,並在主線程修改ui介面。

監聽網路狀態

using system using system.threading using system.runtime.interopservices namespace network static networkhelper public static networkhelper getnetwork...

用Reachability實時監聽網路的變化

在 didfinishlaunchingwithoptions中增加如下 使用通知中心監聽kreachabilitychangednotification通知 nsnotificationcenter defaultcenter addobserver self selector selector ...

Reachability實時準確監聽網路狀態

公司專案需要精確傳遞2g 3g 4g wifi網路狀態引數,所以就想到了蘋果的reachability。但今天被reachability給坑了,初始化的時候使用 reachabilitywithhostname 方法,結果每次檢測到的結果都是無網路。所以記下來這個坑,分享給大家。1 2 3 4 5 ...