MOMO173
人可能在奔溃的边缘
MOMO
android判断网络状态
android判断网络状态

我们平时使用手机的时候都会偶尔看到有一个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();
            }

当网络可用的时候
直接调用刚刚获取的networkInfo实例,调用它的getTypeName方法获取当前的网络名字
https://i.loli.net/2019/05/10/5cd457fe362c6.png
https://i.loli.net/2019/05/10/5cd4580a77c9a.png

https://secure.gravatar.com/avatar/5967493088983a79f7ef15e91c8e0598?s=256&d=mm&r=g

momo

文章作者

MOMO

android判断网络状态
我们平时使用手机的时候都会偶尔看到有一个Toast提示我们网络状态如何的,比如bilibili在看视频的时候,突然切换到数据的话就会提示你。 这个怎么做的呢,最近学习了接受系统广播的方法,…
扫描二维码继续阅读
2019-05-10
功能
关注我