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

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

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

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

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

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

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

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

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

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

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

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

NetStatus工具庫使用方法:

介紹

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

功能

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

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

使用

  • 引入依賴
    引入NetStatus庫 lib

  • 注冊(cè):

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

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

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

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

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

    說明:

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

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

    NetTypeObservable.setNetworkListener(new NetworkListener() {
        @Override
        public void netChange(NetType netType) {
            // 網(wǎng)絡(luò)變化時(shí)
        }
    });
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容