zoukankan      html  css  js  c++  java
  • Android-监听网络状态

    1.注册一个广播接收器,监听网络状态
    private void Start()
    {
    IntentFilter filter = new IntentFilter();
    filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
    filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
    filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
    this.registerReceiver(myBroadcastReceiver, filter);
    }


    2.取消注册广播器
    private void Stop()
    {
    this.unregisterReceiver(myBroadcastReceiver);
    }


    3.新建监听类NetworkConnectChangedReceiver继承BroadcastReceiver


    public class NetworkConnectChangedReceiver extends BroadcastReceiver
    {
    @Override
    public void onReceive(Context context, Intent intent)
    {
    // 这个监听wifi的打开与关闭,与wifi的连接无关
    if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction()))
    {
    int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
    switch (wifiState)
    {
    case WifiManager.WIFI_STATE_ENABLED:
    Log.e("APActivity", "WIFI_STATE_ENABLED");
    break;
    case WifiManager.WIFI_STATE_ENABLING:
    Log.e("APActivity", "WIFI_STATE_ENABLING");
    break;
    case WifiManager.WIFI_STATE_DISABLED:
    Log.e("APActivity", "WIFI_STATE_DISABLED");
    break;
    case WifiManager.WIFI_STATE_DISABLING:
    Log.e("APActivity", "WIFI_STATE_DISABLING");
    break;
    }
    }
    // 这个监听wifi的连接状态即是否连上了一个有效无线路由,当上边广播的状态是WifiManager.WIFI_STATE_DISABLING,和WIFI_STATE_DISABLED的时候,根本不会接到这个广播。
    // 在上边广播接到广播是WifiManager.WIFI_STATE_ENABLED状态的同时也会接到这个广播,当然刚打开wifi肯定还没有连接到有效的无线
    if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction()))
    {
    Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
    if (null != parcelableExtra)
    {
    NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;
    switch (networkInfo.getState())
    {
    case CONNECTED:
    Log.e("APActivity", "CONNECTED");
    break;
    case CONNECTING:
    Log.e("APActivity", "CONNECTING");
    break;
    case DISCONNECTED:
    Log.e("APActivity", "DISCONNECTED");
    break;
    case DISCONNECTING:
    Log.e("APActivity", "DISCONNECTING");
    break;
    case SUSPENDED:
    Log.e("APActivity", "SUSPENDED");
    break;
    case UNKNOWN:
    Log.e("APActivity", "UNKNOWN");
    break;
    default:
    break;
    }
    }
    }
    // 这个监听网络连接的设置,包括wifi和移动数据的打开和关闭。
    // 最好用的还是这个监听。wifi如果打开,关闭,以及连接上可用的连接都会接到监听。见log
    // 这个广播的最大弊端是比上边两个广播的反应要慢,如果只是要监听wifi,我觉得还是用上边两个配合比较合适
    if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction()))
    {
    NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
    if (info != null)
    {
    StringBuilder sb = new StringBuilder();
    sb.append("info.getTypeName() : " + info.getTypeName() + " ");
    sb.append("getSubtypeName() : " + info.getSubtypeName() + " ");
    sb.append("getState() : " + info.getState() + " ");
    sb.append("getDetailedState() : " + info.getDetailedState().name() + " ");
    sb.append("getDetailedState() : " + info.getExtraInfo() + " ");
    sb.append("getType() : " + info.getType());
    Log.e("APActivity", sb.toString());
    }
    }
    }
    }


    当网络连接接通的时候,是用的是Wifi或者3G网络。利用本文所述,可以实现记录何时使用的是Wifi,何时使用的是3G网络。

    public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
    NetworkInfo ni = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
    if (ni.getState() == State.CONNECTED && ni.getType() == ConnectivityManager.TYPE_WIFI) {
    Log.v("kevin", "wifi connected");
    } else if(ni.getState() == State.DISCONNECTED && ni.getType() == ConnectivityManager.TYPE_WIFI){
    Log.v("kevin", "wifi disconnected");
    }
    }
    }
    }

  • 相关阅读:
    Unity3D 事件
    Unity3D 动画回调方法
    Unity3D优化总结
    Unity3D 第一人称控制器 C#脚本
    TCP/IP与IETF的RFC
    linux内核调优参考
    nginx_tcp_proxy代理酸酸乳
    Gitlab+Jenkins实现自动部署
    inotifywait命令详解及安装
    yum无法安装nginx,报错内容为1:nginx-1.14.2-1.el7_4.ngx.x86_64: [Errno 5] [Errno 2] 没有那个文件或目录
  • 原文地址:https://www.cnblogs.com/qiaoxu/p/4613601.html
Copyright © 2011-2022 走看看