1.先说一下广播,广播分为两种:静态广播和动态广播。静态广播即是静态注册的,而动态广播是代码动态注册。静态注册是通过 AndroidManifest 注册,是常驻型 ,当应用程序关闭以后,如果还有广播发出,程序也会被系统调用自动运行。动态注册广播不是常驻型广播,广播跟随 activity 的生命周期变化(一般在 onDestory 方法注销广播)。
2.权限 :
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3.广播代码如下:
public class NetStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()) {
//说明网络是连接的
int type = networkInfo.getType();
switch (type) {
case ConnectivityManager.TYPE_MOBILE: //移动网络
break;
case ConnectivityManager.TYPE_WIFI: //wifi
break;
}
} else {
showToast("网络不可用");
}
}
}
4.动态注册
动态注册需要在你需要接受广播的 activity 中注册,然后进行你想要的操作。
在 onCreat 放里面注册:
private void rigisterReceiver() {
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
mStateReceiver = new NetStateReceiver();
registerReceiver(mStateReceiver,filter);
}
在 onDestory 方法里面注销:
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mStateReceiver);
}
5.静态注册
静态注册广播 是一个全局的广播,你的 App 退出以后,有网络变化,也会发出广播。
在 AndroidManifest 中注册:
<receiver android:name=".broadcast.NetStateReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>