检索无线网络连接状态(安卓) [英] Retrieve wifi connection status(Android)

查看:103
本文介绍了检索无线网络连接状态(安卓)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我按照<一href="http://stackoverflow.com/questions/4374862/how-to-programatically-create-and-read-wep-eap-wifi-configurations-in-android/4374934#4374934">following链接与本地的无线网络连接。这是工作完美。我能够连接到我本地的无线网络。

不过,我真正想要的无线网络的当前状态,我使用下面的code以获得无线的状态。但不幸的是,我只能得到禁用,已启用和扫描的状态,我真的想收到其他中间状态。

你能告诉我什么,我做错了。

 公共类ConnectionChangeReceiver扩展的BroadcastReceiver {
    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图){

        的NetworkInfo信息= intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
        消息味精=新的Message();
        msg.what = 5;
        叠B =新包();
        字符串sStatus =未知;
        开关(info.getDetailedState()){
        案例验证:
            sStatus =身份验证...;
            打破;
        案件有关:
            sStatus =已连接;
            打破;
        案件正在连接:
            sStatus =连接...;
            打破;
        案例DISCONNECTED:
            sStatus =断开连接;
            打破;
        案例DISCONNECTING:
            sStatus =断开连接...;
            打破;
        例失败:
            sStatus =失败;
            打破;
        空闲的情况下:
            sStatus =空闲;
            打破;
        案例OBTAINING_IPADDR:
            sStatus =获取IP地址...;
            打破;
        案例扫描:
            sStatus =扫描...;
            打破;
        案例悬挂:
            sStatus =暂停;
            打破;
        }
        b.putString(状态,sStatus);
        msg.setData(B);
        mHandler.sendMessage(MSG);
    }
}
 

予登记以下列方式的广播接收器

  IntentFilter的过滤器=新的IntentFilter(
        ConnectivityManager.CONNECTIVITY_ACTION);
    registerReceiver(networkStateReceiver,过滤器);
 

解决方案

注册reciver为::

  mIntentFilter =新的IntentFilter();
  mIntentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
  mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
  mIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
  mIntentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
  registerReceiver(mReceiver,mIntentFilter);




公共无效的onReceive(上下文的背景下,意图意图)
   {
    串动= intent.getAction();
    如果(action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
    {
    }否则,如果(action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION))
    {
     INT ITEMP = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
       WifiManager.WIFI_STATE_UNKNOWN);
     LogUtil.d(LOG_SET,+++++++ ----------- ------ wifiStateReceiver +++++++,DEBUG);
     的CheckState(ITEMP);
    }否则,如果(action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION))
    {
     DetailedState状态= WifiInfo.getDetailedStateOf((SupplicantState)
     intent.getParcelableExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED));
     改变状态(状态);
     LogUtil.d(LOG_SET,------------&GT;&GT;&GT;&GT; SUPPLICANT_STATE_CHANGED_ACTION&LT;&LT;&LT;&LT;&LT;&LT; -------,DEBUG) ;
    }
    否则,如果(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION))
    {
        DetailedState状态=
       ((的NetworkInfo)intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO))getDetailedState();
       改变状态(状态);
     }
   }
   私人无效改变状态(DetailedState aState)
    {
     LogUtil.d(LOG_SET, ">>>>>>>>>>>>>>>>>>changeState<<<<<<<<<<<<<<<<"+aState, DEBUG);
   如果(aState == DetailedState.SCANNING)
   {
   Log.d(wifiSupplicanState,扫描);
   }
   否则,如果(aState == DetailedState.CONNECTING)
   {
   Log.d(wifiSupplicanState,连接);
   }否则,如果(aState == DetailedState.OBTAINING_IPADDR)
   {
   Log.d(wifiSupplicanState,OBTAINING_IPADDR);
   }
   否则,如果(aState == DetailedState.CONNECTED)
   {
   Log.d(wifiSupplicanState,连接);
   }
   否则,如果(aState == DetailedState.DISCONNECTING)
   {
    Log.d(wifiSupplicanState,断开);
   }
   否则,如果(aState == DetailedState.DISCONNECTED)
   {
    Log.d(wifiSupplicanState,DISCONNECTTED);
   }
   否则,如果(aState == DetailedState.FAILED)
   {
   }
  }

  公共无效的CheckState(INT是不是)
  {
   LogUtil.d(LOG_SET,"==>>>>>>>>checkState<<<<<<<<"+aInt, DEBUG);
   如果(是不是== WifiManager.WIFI_STATE_ENABLING)
    {
    Log.d(WifiManager,WIFI_STATE_ENABLING);
    }
   否则,如果(是不是== WifiManager.WIFI_STATE_ENABLED)
   {
   Log.d(WifiManager,WIFI_STATE_ENABLED);
    }
    否则,如果(是不是== WifiManager.WIFI_STATE_DISABLING)
    {
    Log.d(WifiManager,WIFI_STATE_DISABLING);
    }
    否则,如果(是不是== WifiManager.WIFI_STATE_DISABLED)
    {
    Log.d(WifiManager,WIFI_STATE_DISABLED);
    }
  }
 

I have followed the following link to connect with local wifi. It is working perfect. I am able to connect to my local wifi.

But, I really want the current status of the wifi, I am using following code to get the status of wifi. But unfortunately I am only able to get 'DISABLED', 'ENABLED' and 'SCANNING' status, I really want to receive other intermediary states.

Can you tell me what I am doing wrong.

public class ConnectionChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
        Message msg = new Message();
        msg.what = 5;
        Bundle b = new Bundle();
        String sStatus = "UnKnown";
        switch(info.getDetailedState()){
        case AUTHENTICATING:
            sStatus = "Authenticating...";
            break;
        case    CONNECTED:
            sStatus = "Connected";
            break;
        case    CONNECTING:
            sStatus = "Connecting...";
            break;
        case    DISCONNECTED:
            sStatus = "Disconnected";
            break;
        case    DISCONNECTING:
            sStatus = "Disconnecting...";
            break;
        case    FAILED:
            sStatus = "Failed";
            break;
        case    IDLE:
            sStatus = "Idle";
            break;
        case    OBTAINING_IPADDR :
            sStatus = "Obtaining IP Address...";
            break;
        case    SCANNING:
            sStatus = "Scanning...";
            break;
        case    SUSPENDED:
            sStatus = "Suspended";
            break;
        }
        b.putString("status", sStatus);
        msg.setData(b);
        mHandler.sendMessage(msg);
    }
}

I register the broadcast receiver in the following way

IntentFilter filter = new IntentFilter(
        ConnectivityManager.CONNECTIVITY_ACTION);
    registerReceiver(networkStateReceiver, filter);

解决方案

register a reciver for::

mIntentFilter = new IntentFilter();
  mIntentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
  mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
  mIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
  mIntentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
  registerReceiver(mReceiver, mIntentFilter);




public void onReceive(Context context, Intent intent)
   {
    String action  = intent.getAction();
    if(action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
    {
    }else if(action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION))
    {
     int iTemp = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
       WifiManager.WIFI_STATE_UNKNOWN);
     LogUtil.d(LOG_SET, "+++++++-----------wifiStateReceiver------+++++++", DEBUG);
     checkState(iTemp);
    }else if(action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION))
    {
     DetailedState state =WifiInfo.getDetailedStateOf((SupplicantState)
     intent.getParcelableExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED));
     changeState(state);
     LogUtil.d(LOG_SET, "------------>>>>SUPPLICANT_STATE_CHANGED_ACTION<<<<<<-------", DEBUG);
    }
    else if(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION))
    {
        DetailedState state=
       ((NetworkInfo)intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO)).getDetailedState();
       changeState(state);
     }
   }
   private void changeState(DetailedState aState)
    {
     LogUtil.d(LOG_SET, ">>>>>>>>>>>>>>>>>>changeState<<<<<<<<<<<<<<<<"+aState, DEBUG);
   if (aState == DetailedState.SCANNING)
   {
   Log.d("wifiSupplicanState", "SCANNING");
   }
   else if (aState == DetailedState.CONNECTING)
   {
   Log.d("wifiSupplicanState", "CONNECTING");
   }else if(aState == DetailedState.OBTAINING_IPADDR)
   {
   Log.d("wifiSupplicanState", "OBTAINING_IPADDR");
   }
   else if (aState == DetailedState.CONNECTED)
   {
   Log.d("wifiSupplicanState", "CONNECTED");
   }
   else if (aState == DetailedState.DISCONNECTING)
   {
    Log.d("wifiSupplicanState", "DISCONNECTING");
   }
   else if (aState == DetailedState.DISCONNECTED)
   {
    Log.d("wifiSupplicanState", "DISCONNECTTED");
   }
   else if (aState == DetailedState.FAILED)
   {
   }
  }

  public void checkState(int aInt)
  {
   LogUtil.d(LOG_SET,"==>>>>>>>>checkState<<<<<<<<"+aInt, DEBUG);
   if (aInt == WifiManager.WIFI_STATE_ENABLING)
    {
    Log.d("WifiManager", "WIFI_STATE_ENABLING");
    }
   else if (aInt== WifiManager.WIFI_STATE_ENABLED)
   {
   Log.d("WifiManager", "WIFI_STATE_ENABLED");
    }
    else if (aInt == WifiManager.WIFI_STATE_DISABLING)
    {
    Log.d("WifiManager", "WIFI_STATE_DISABLING");
    }
    else if (aInt == WifiManager.WIFI_STATE_DISABLED)
    {
    Log.d("WifiManager", "WIFI_STATE_DISABLED");
    }
  }

这篇关于检索无线网络连接状态(安卓)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆