前言:最近公司專案重構,為了提高使用者的體驗,專案中要求新增當前網路狀態的實時監聽,以便在無網路狀態時給使用者友好的提醒並修改ui介面。本文將介紹使用四大元件之一的broadcastreceiver實現全域性的網路狀態監聽,使用動態方式註冊。
broadcastreceiver的註冊方式:
(1)動態註冊:即在**中使用registerreceiver()方法進行註冊,動態註冊需要在onpause或ondestory方法中反註冊,不然會出現洩露。
效果圖:
1.定義網路狀態監聽介面及方法?
/**
* 網路狀態型別改變的監聽介面
*/
public
inte***ce
netstatusmonitor
/**
* 設定網路狀態監聽介面
*/
public
void
setstatusmonitor(netstatusmonitor netstatusmonitor)
2.網路狀態工具類?
/**
* created by ruancw on 2018/5/27.
* 網路狀態工具類
*/
public
class
netutil
else
}
}
3.定義netbroadcastreceiver
netbroadcastreceiver繼承自broadcastreceiver,並重寫onreceive方法?
/**
* created by ruancw on 2018/5/27.
*/
public
class
netbroadcastreceiver
extends
broadcastreceiver
}
/**
* 網路狀態型別改變的監聽介面
*/
public
inte***ce
netstatusmonitor
/**
* 設定網路狀態監聽介面
*/
public
void
setstatusmonitor(netstatusmonitor netstatusmonitor)
}
4.baseactivity中註冊
(1)baseactivity實現網路狀態監聽介面
(2)onresume中註冊廣播?
@override
protected
void
onresume()
?
/**
* 註冊網路狀態廣播
*/
private
void
registerbroadcastreceiver()
}
(3)onpause或ondestory中取消註冊?
@override
protected
void
ondestroy()
}
(4)重寫網路監聽介面方法?
@override
public
void
onnetchange(
boolean
netstatus)
?
/**
* 監聽網路狀態做出相應改變
*/
private
void
isnetconnect()
else
}
(5)主線程修改ui?
@suppresslint
(
"handlerleak"
)
handler handler =
new
handler()
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 ...