2013-02-11 103 views
6

我注册接收器上onResume()WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION是从来没有发射

registerReceiver(wifiConnectivityReceiver, new 
       IntentFilter(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)); 

这是接收机本身:我能够连接到选定的WiFi网络

class WiFiConnectivityReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED,false)){ 
      Log.d(TAG,"Connected to network!"); 
     } else { 
      Log.d(TAG,"Could not connect to network!"); 
     } 
    } 
} 

在我的应用程序,但这SUPPLICANT_CONNECTION_CHANGE_ACTION永远不会被解雇。如果我将其更改为SUPPLICANT_STATE_CHANGED_ACTION例如它正在工作。

我正在ICS上工作。
其他人是否遇到过这样的问题?

+1

你为什么不使用'NETWORK_STATE_CHANGED_ACTION'? – 2013-11-13 23:09:41

+0

是的,使用具有预期效果的'NETWORK_STATE_CHANGED_ACTION':http://stackoverflow.com/a/6741489/1977815 – 2017-04-04 20:51:52

回答

4

我的事情,下面的代码将帮助您:

public void installMyReceiver(){ 
    if (I) Log.i(TAG, "installMyReceiver() - Online"); 
    mFlag = true; 


    myReceiver = new BroadcastReceiver(){ 
     public void onReceive (Context context, Intent intent){ 
      String action = intent.getAction(); 

      if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)){ 

       SupplicantState supplicantState = (SupplicantState)intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE); 
       if (supplicantState == (SupplicantState.COMPLETED)){ 
        if (I) Log.i(TAG, "SUPPLICANTSTATE ---> Connected"); 
         //do something 
       } 

       if (supplicantState == (SupplicantState.DISCONNECTED)){ 
        if (I) Log.i(TAG, "SUPPLICANTSTATE ---> Disconnected"); 
         //do something 
       } 

      } 
     } 
    }; 

    IntentFilter mFilter = new IntentFilter (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); 
    this.registerReceiver (myReceiver, mFilter); 
} 

这是一个简单的方法以获得您想要的信息,然后执行一些动作。 我希望它能帮助你!

0

是否有人遇到类似这样的问题?

是的,我。看起来在某些设备上,操作系统从未声明过这个意图。 (是的,我在出厂时重置了该设备。)我最终增加了一个看门狗计数器,以检查WifiManager.isWifiEnabled()以了解变化。当然,这总会有点拖延。

,如果你的代码,确实的设备上执行,不要忘记从HandlerBroadcastReceiver再次删除回调Runnable的同一个实例如果你这样做,不处理事件两次宣布意图。