NetStateReceiver【監聽網路狀態變化】


版權聲明:本文為HaiyuKing原創文章,轉載請注明出處!

前言

用來監控網絡變化時的處理,一般用來toast提示或者擴展為其他作用。

效果圖

  

代碼分析

NetStateReceiver:網絡改變時的廣播器

NetUtils:獲取網絡類型

使用步驟

一、項目組織結構圖

注意事項:

1、導入類文件后需要change包名以及重新import R文件路徑

2、Values目錄下的文件(strings.xml、dimens.xml、colors.xml等),如果項目中存在,則復制里面的內容,不要整個覆蓋

二、導入步驟

將netstatus包復制到項目中

在AndroidManifest.xml文件中聲明權限以及靜態注冊NetStateReceiver【注意,路徑需要跟實際項目的路徑保持一致】

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.why.project.netstatereceiverdemo">

    <!-- ======================NetStateReceiver相關========================== -->
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

        <!-- ===========NetStateReceiver相關=====也可以使用動態注冊在MyApplication,不過需要注意注銷的觸發時機=============== -->
        <receiver android:name=".utils.netstatus.NetStateReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
                <action android:name="os.net.conn.CONNECTIVITY_CHANGE"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>

在BaseActivity.java中添加以下代碼

package com.why.project.netstatereceiverdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.why.project.netstatereceiverdemo.utils.ToastUtil;
import com.why.project.netstatereceiverdemo.utils.netstatus.NetChangeObserver;
import com.why.project.netstatereceiverdemo.utils.netstatus.NetStateReceiver;
import com.why.project.netstatereceiverdemo.utils.netstatus.NetUtils;


/**
 * Created by HaiyuKing
 * Used Activity基類
 */

public abstract class BaseActivity extends AppCompatActivity {

    private static final String TAG = "BaseActivity";

    /*=================網絡變化的廣播器=====================*/
    protected NetChangeObserver mNetChangeObserver; 
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        /*=================網絡變化的廣播器=====================*/ registerNetStateChange();//注冊網絡變化的廣播器

        super.onCreate(savedInstanceState);
    }

    protected void onDestroy() {
        super.onDestroy();
        /*=================網絡變化的廣播器=====================*/ NetStateReceiver.removeRegisterObserver(this.mNetChangeObserver);
    }

    /*==========網絡變化的廣播器=============*/
    private void registerNetStateChange() { if (this.mNetChangeObserver == null) { this.mNetChangeObserver = new NetChangeObserver() { public void onNetConnected(NetUtils.NetType netType) { super.onNetConnected(netType); onNetworkConnected(netType); if (NetUtils.isMobileConnected(getApplicationContext())){ ToastUtil.showShortToast("您當前正在使用運營商網絡"); } if(NetUtils.isWifiConnected(getApplicationContext())){ ToastUtil.showShortToast("您當前正在使用無線網絡"); } } public void onNetDisConnect() { super.onNetDisConnect(); onNetworkDisConnected(); ToastUtil.showShortToast("網絡無法連接,請檢查網絡設置"); } }; NetStateReceiver.registerObserver(this.mNetChangeObserver);// 聲明mNetChangeObserver注冊到網絡狀態廣播接收器中
 } } protected abstract void onNetworkConnected(NetUtils.NetType netType); protected abstract void onNetworkDisConnected();

}

本Demo搭配《ToastUtil【簡單的Toast封裝類】【未自定義Toast的顯示風格】》使用

三、使用方法

package com.why.project.netstatereceiverdemo;

import android.os.Bundle;

import com.why.project.netstatereceiverdemo.utils.netstatus.NetUtils;

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override protected void onNetworkConnected(NetUtils.NetType netType) { } @Override protected void onNetworkDisConnected() { }
}

混淆配置

參考資料

http://www.cnblogs.com/renzimu/p/4537954.html

http://www.cnblogs.com/renzimu/p/4537936.html

項目demo下載地址

https://github.com/haiyuKing/NetStateReceiverDemo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM