NetStatus 監(jiān)聽網(wǎng)絡變化及獲取網(wǎng)絡形式

在實際開發(fā)中在我們的 app 中幾乎都會用到網(wǎng)絡,有時我們需要在網(wǎng)絡改變時給用戶一些體驗上的友好提示,比如:我們在視頻播放時,由wifi切換到4G網(wǎng)絡時,要給用戶提示,當前為 4G 網(wǎng)絡狀態(tài),注意流量的使用等.

不同level 網(wǎng)絡變化監(jiān)聽

在android5.0(API21)之前是使用廣播的方式進行監(jiān)聽,從android5.0(API21)起使用NetworkCallback 監(jiān)聽網(wǎng)絡變化.

下面主要介紹基于廣播的方式監(jiān)聽網(wǎng)絡變,NetStatus 庫目前也是基于廣播的方式實現(xiàn),后期會適配 API21 以后新的方法 NetworkCallback.

網(wǎng)絡變化的監(jiān)聽

實現(xiàn)方法,我們通過添加廣播的方式,監(jiān)聽網(wǎng)絡變化.

  1. 添加網(wǎng)絡狀態(tài)權限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  1. 創(chuàng)建網(wǎng)絡變化監(jiān)聽廣播
public class NetStatusBroadcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
    //當網(wǎng)絡變化時,該廣播中該方法會被回調.
    }
}
  1. 在 AndroidManifest.xml 中添加廣播的配置信息,如下:
<receiver android:name=".NetStatusBroadcast">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
    </intent-filter>
</receiver>

實現(xiàn)這個功能很簡單,就上面這個幾行代碼就可以實現(xiàn).

在注冊網(wǎng)絡變化監(jiān)聽時,建議是使用動態(tài)注冊方式.不要忘記當程序退出時記得你,取消注冊.

IntentFilter filter = new IntentFilter();
filter.addAction(NetStatusBroadcast.NET_CHANGE_ACTION);
mBroadcast = new NetStatusBroadcast();
this.registerReceiver(mBroadcast,filter);

下面是一個監(jiān)聽網(wǎng)絡變化的工具庫NetStatus

NetStatus工具庫使用方法:

介紹

NetStatus 是一個監(jiān)聽網(wǎng)絡狀態(tài)變化的工具庫.

功能

  1. 在網(wǎng)絡狀態(tài)發(fā)生變化時,可以控制不同注冊監(jiān)聽響應順序
  2. 可以對網(wǎng)絡狀態(tài)進行過濾和攔截處理.
工程地址:

載地址:https://github.com/MrChao1991/NetStatus

使用

  • 引入依賴
    引入NetStatus庫 lib

  • 注冊:

    NetWorkStatus.register(context);
    
  • 取消注冊:

    NetWorkStatus.unregister();
    
  • 注冊網(wǎng)絡變化監(jiān)聽
    默認優(yōu)先級, 優(yōu)先級默認為0 ,最低

    private NetStatusReceiver receiver = new NetStatusReceiver() {
        @Override
        protected void netStatusChanged(NetType netType) {
            // 變化時,回調
        }
    
        @Override
        public boolean onFilter(NetType netType) {
            // 過來方法,如果攔截 返回false ,繼續(xù)執(zhí)行后面的監(jiān)聽返回true
            return super.onFilter(netType);
        }
    };
    NetTypeObservable.register(receiver);
    

    帶有優(yōu)先級注冊, 優(yōu)先級越高優(yōu)先執(zhí)行.

    private NetStatusReceiver receiver = new NetStatusReceiver() {
        @Override
        protected void netStatusChanged(NetType netType) {
            // 網(wǎng)絡變化時,回調
        }
    
        @Override
        public boolean onFilter(NetType netType) {
            // 過濾和攔截方法,如果攔截 返回false ,繼續(xù)執(zhí)行后面的監(jiān)聽返回true
            return super.onFilter(netType);
        }
    };
    NetTypeObservable.register(receiver, 20);
    

    說明:

    1. 注冊時可以設置Receiver的優(yōu)先級,優(yōu)先級高的先執(zhí)行,相同優(yōu)先級的,后注冊的先被運行.
    2. 執(zhí)行完netStatusChanged會執(zhí)行到onFilter中,在onFilter中可以對網(wǎng)絡狀態(tài)進行干預和攔截.
    3. 使用NetTypeObservable.register()注冊網(wǎng)絡狀態(tài)改變監(jiān)聽,可以注冊多個,不使用的要使用NetTypeObservable.unregister(receiver); 取消注冊.
  • 取消網(wǎng)絡變化監(jiān)聽注冊

    NetTypeObservable.unregister(receiver);
    
  • 單回調網(wǎng)絡變化監(jiān)聽:
    無論注冊多少次,在網(wǎng)絡發(fā)生變化時,只有最后一次設置的監(jiān)聽對象會被回調.

    NetTypeObservable.setNetworkListener(new NetworkListener() {
        @Override
        public void netChange(NetType netType) {
            // 網(wǎng)絡變化時
        }
    });
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市咬清,隨后出現(xiàn)的幾起案子悦冀,更是在濱河造成了極大的恐慌,老刑警劉巖货徙,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡掀潮,警方通過查閱死者的電腦和手機骄呼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門共苛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜓萄,你說我怎么就攤上這事隅茎。” “怎么了嫉沽?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵辟犀,是天一觀的道長。 經(jīng)常有香客問我绸硕,道長堂竟,這世上最難降的妖魔是什么魂毁? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮出嘹,結果婚禮上席楚,老公的妹妹穿的比我還像新娘。我一直安慰自己税稼,他們只是感情好烦秩,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著郎仆,像睡著了一般只祠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扰肌,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天铆农,我揣著相機與錄音,去河邊找鬼狡耻。 笑死墩剖,一個胖子當著我的面吹牛,可吹牛的內容都是我干的夷狰。 我是一名探鬼主播岭皂,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沼头!你這毒婦竟也來了爷绘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤进倍,失蹤者是張志新(化名)和其女友劉穎土至,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猾昆,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡陶因,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了垂蜗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楷扬。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贴见,靈堂內的尸體忽然破棺而出烘苹,到底是詐尸還是另有隱情,我是刑警寧澤片部,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布镣衡,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏廊鸥。R本人自食惡果不足惜然爆,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望黍图。 院中可真熱鬧,春花似錦奴烙、人聲如沸助被。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揩环。三九已至,卻和暖如春幅虑,著一層夾襖步出監(jiān)牢的瞬間丰滑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工倒庵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留褒墨,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓擎宝,卻偏偏與公主長得像郁妈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绍申,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理噩咪,服務發(fā)現(xiàn),斷路器极阅,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程胃碾,因...
    小菜c閱讀 6,401評論 0 17
  • 案例最后效果: 廣播的類型: 標準廣播 標準廣播是完全異步的廣播, 也就是當廣播發(fā)出之后筋搏, 所有的廣播接收器機會都...
    史慧君閱讀 3,122評論 2 50
  • 時間如流水仆百,當我們從童真邁向年少的輕狂走向穩(wěn)重成熟。當我們的大學生活匆匆來臨又匆匆溜走奔脐。當我們邁出校門走向社...
    暖暖南風閱讀 354評論 0 1
  • 結伴的過雁 凝固于如血的殘陽 悠揚的琴聲 撩拔起深埋的憂傷 千年的目光 難尋覓伊人的方向 閃去的列車 帶起白衣裙袂...
    安宿閱讀 279評論 0 3