如何判断当前网络状况

这里写图片描述

判断当前模拟器或手机的网络连接状况

主函数

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private TextView mTextView;
    private Button mButtonDetail;
    private ConnectivityManager mconnectivityManager;
    private NetworkInfo networkInfo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView) findViewById(R.id.textview_net_detail);
        mButtonDetail = (Button) findViewById(R.id.button_net_detail);
        mButtonDetail.setOnClickListener(this);
        mconnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        networkInfo = mconnectivityManager.getActiveNetworkInfo();
        @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button_net_detail:
                if (networkInfo != null && networkInfo.isAvailable()) {
                    Toast.makeText(MainActivity.this, "network is available", Toast.LENGTH_SHORT).show();
                    mTextView.setText("连接网络的方式为:" + networkInfo.getTypeName());
                } else {
                    Toast.makeText(MainActivity.this, "network is unavailable", Toast.LENGTH_SHORT).show();
                    mTextView.setText("没有网络连接");
                }
                break;
        }
    }

布局

<TextView
    android:id="@+id/textview_net_detail"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
    <Button
        android:id="@+id/button_net_detail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取网络详情"/>

总结:首先通过getSystemService()方法得到了ConnectionManager的实例,这是一个系统服务类,专门用于管理网络连接,然后调用它的getActiveNetworkInfo()方法可以得到NetworkInfo 的实例,接着调用NetworkInfo 的isAvailable()方法,即可以判断出当前是否有网络了。通过Toast的方式,对用户进行提示。在通过networkInfo.getTypeName()方法得到网络的具体连接方式。{ mTextView.setText(“连接网络的方式为:” + networkInfo.getTypeName());}

这里也必须加入权限**<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>**

动态注册监听网络变化

要想知道当前网络的变化,还可以采用广播接收器来监听网络的变化,

主函数

public class MainActivity extends AppCompatActivity{
 private NetworkChangeReceiver networkChangeReceiver;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IntentFilter filter=new IntentFilter();
        filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        networkChangeReceiver=new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, filter);
  }
   @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(networkChangeReceiver);
    }

    class NetworkChangeReceiver extends BroadcastReceiver{
     private ConnectivityManager mconnectivityManager;
    private NetworkInfo networkInfo;
        @Override
        public void onReceive(Context context, Intent intent) {
             mconnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        networkInfo = mconnectivityManager.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isAvailable()) {
                    Toast.makeText(MainActivity.this, "network is available", Toast.LENGTH_SHORT).show();
                    mTextView.setText("连接网络的方式为:" + networkInfo.getTypeName());
                } else {
                    Toast.makeText(MainActivity.this, "network is unavailable", Toast.LENGTH_SHORT).show();
                    mTextView.setText("没有网络连接");
                }

        }
    }

步骤总结

1、定义一个内部类NetworkChangeReceiver ,让它继承自BroadcastReceiver,并重写父类的onReceive()方法。
2、在onCreate()方法中,创建一个IntentFilter的实例,并给它添加一个值为android.net.conn.CONNECTIVITY_CHANGE的action,为什么要添加这个值呢?——我们的广播接收器想要监听什么广播,就在这里添加相应的action就行了。
3、创建一个NetworkChangeReceiver 的实例,然后调用registerReceiver()方法进行注册,将NetworkChangeReceiver 的实例和IntentFilter的实例都传进去。这样NetworkChangeReceiver 就会收到所有值为android.net.conn.CONNECTIVITY_CHANGE的广播,也实现了监听网络变化的功能,
4、最后一定要记得,动态注册的广播接收器一定要取消注册才行,这里我是在onDestroy()方法中通过调用unregisterReceiver()方法来实现的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值