wifi打开,连接到网络获得了IP才算连接上,有办法在activity启动的时候判断吗?
另外有没有办法监听断开了wifi网络连接和连接上了wifi网络连接?

解决方案 »

  1.   

    判断WIFI是否连接:
    ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
    if(wifi == State.CONNECTED){
    //WIFI已连接
    }监听WifiManager.NETWORK_STATE_CHANGED_ACTION可以获取WIFI网络连接状态改变的广播
    监听WifiManager.WIFI_STATE_CHANGED_ACTION可以获取WIFI状态改变的广播(打开、关闭、正在打开、正在关闭、未知)。
    @Override
    public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    System.out.println(intent.getAction());
    if(intent.getAction().equals(WifiManager.RSSI_CHANGED_ACTION))
    {
    //信号强度改变
    int strength=getStrength(context);
    System.out.println("当前信号 "+strength);
    }else if(intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){
    System.out.println("网络状态改变");
    NetworkInfo info=intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
    if(info.getState().equals(NetworkInfo.State.DISCONNECTED))
    {
    //WIFI网络断开
    } else if(...){
    //其他状态
    }
    }else if(intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION))
    {
    //WIFI开关
    int wifistate=intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,WifiManager.WIFI_STATE_DISABLED);
    if(wifistate==WifiManager.WIFI_STATE_DISABLED)
    {
    //WIFI关闭
    } else if(...){
    //其他状态
    }
    }
     
    }需要权限:
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      

  2.   

    @tantahe,非常感谢。
    第一段代码判断WIFI是否连接,我测试的是wifi连接上IP了,也就是在通知栏出现了那个wifi信号强度图标,才wifi == State.CONNECTED,如果仅仅是wifi打开了,附近有好多热点,但是一个也没有登录上的话,wifi的状态不是State.CONNECTED。
    第二段代码,wifi打开,以及wifi连接上了热点,状态都能侦测到。不过这个NETWORK_STATE_CHANGED_ACTION,不仅仅是wifi登录或者退出触发,3G网络登录或者退出可能也会触发,我这几天申请个联通3G测试一下看。
      

  3.   

    今天定制了一个10元流量包测试了一下,联通3G打开和关闭,不触发NETWORK_STATE_CHANGED_ACTION,可能移动的也不会触发。再次感谢@tantahe,祝节日快乐!
      

  4.   

    WifiManager.NETWORK_STATE_CHANGED_ACTION只是用来判断WIFI网络连接状态的,移动网络连接状态的改变不会发送这个广播。