我们平时使用手机的时候都会偶尔看到有一个Toast提示我们网络状态如何的,比如bilibili在看视频的时候,突然切换到数据的话就会提示你。
这个怎么做的呢,最近学习了接受系统广播的方法,里面也有通过动态注册监听网络变化的方法:
判断网络变化
public class MainActivity extends AppCompatActivity{
private IntentFilter intentFilter;
private NetworkchangReceiver networkchangReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//新建一个intentFilter来记载接受什么广播
intentFilter = new IntentFilter();
//当网络发生变化的时候,系统传出的正是下面这个方法
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
//创建NetworkchangReceiver这个实例
networkchangReceiver = new NetworkchangReceiver();
//调用registerReceiver注册
registerReceiver(networkchangReceiver,intentFilter);
}
class NetworkchangReceiver extends BroadcastReceiver{
//创建一个广播接收器,写一个class继承于BroadcastReceiver
//并重写onReceive方法,这样每当网络变化的时候都会执行里面
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"Network changes",Toast.LENGTH_SHORT).show();
//每当网络发送变化的时候就输出Toast
}
}
}
最后一定要记得,动态注册的方法一定要取消,直接在onDestroy()方法中取消
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(networkchangReceive);
}
这样就完成了检测网络变化的功能,但是和我们的目标还有点距离,现在只是完成了网络变化就提示Toast而已,我们还要修改一下,让它识别是变成了什么网络
判断网络是否可用
在android中判断网络需要用到ConnectivityManager,这里再绕一下路,判断网络是否可用
修改广播接收器中的onReceiver方法
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
//首先通过getSystemService方法得到ConnectivityManager的实例,这是系统服务类,专门管网络的
//然后调用它的getActiveNetworkInfo方法得到NetworkInfo实例
NetworkInfo network = cm.getActiveNetworkInfo();
if(network !=null && network.isAvailable()){
Toast.makeText(context,"网络可用",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context,"网络不可用",Toast.LENGTH_SHORT).show();
}
这也就完成了
判断当前是什么网络
接下来就开始判断网络可用的情况下,用着的是什么网络(因为网络不可用判断也没啥用把
直接接着修改上面的代码
if(network != null && network.isAvailable()){
//当网络可用的时候
//判断网络状态
String type = network.getTypeName();
if(type.equalsIgnoreCase("Wifi")){
Toast.makeText(context, "你正在使用的是wifi网络", Toast.LENGTH_SHORT).show();
}else if(type.equalsIgnoreCase("MOBILE")){
Toast.makeText(context,"你正在使用数据流量",Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(context,"Network is unavailable",Toast.LENGTH_SHORT).show();
}