动态监听网络状态广播示例:
(1) AndroidManifest.xml中加入权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
(2)MainActivity.java文件
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private MyReceiver myReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
myReceiver = new MyReceiver();
registerReceiver(myReceiver,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"网络状态发生变化"+getNetworkType(),Toast.LENGTH_SHORT).show();
}
}
public static final int NETTYPE_WIFI = 1;
public static final int NETTYPE_CMWAP = 2;
public static final int NETTYPE_CMNET = 3;
public int getNetworkType(){
int netType = 0;
ConnectivityManager connectivityManager =(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo == null){
return netType;
}
int nType = networkInfo.getType();
if (nType == ConnectivityManager.TYPE_MOBILE){
String extraInfo = networkInfo.getExtraInfo();
if (!TextUtils.isEmpty(extraInfo)){
if (extraInfo.toLowerCase().equals("cmnet")){
netType = NETTYPE_CMNET;
}else{
netType = NETTYPE_CMWAP;
}
}
}else if (nType == ConnectivityManager.TYPE_WIFI){
netType = NETTYPE_WIFI;
}
return netType;
}
}
getNetworkType() 方法中,首先通过getSystemService() 方法得到了ConnectivityManager实例,这是一个系统服务类,专门用于管理网络连接的。然后调用它的getActiveNetworkInfo() 方法得到NetworkInfo的实例,接着调用NetworkInfo的getType() 方法,就可以判断出当前网络状态了。