版權聲明:本文為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