6

我正在注册接收器onResume()

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

这是接收器本身:

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!");
        }
    }
}

在我的应用程序中,我能够连接到选定的 WiFi 网络,但这SUPPLICANT_CONNECTION_CHANGE_ACTION从未被触发。如果我​​将其更改SUPPLICANT_STATE_CHANGED_ACTION为例如它正在工作。

我正在研究 ICS。
其他人是否遇到过这样的问题?

4

2 回答 2

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);
}

这是获取所需信息然后执行某些操作的简单方法。我希望它可以帮助你!

于 2013-09-15T19:15:17.007 回答
0

其他人是否遇到过这样的问题?

是我。似乎在某些设备上,操作系统从未声明过意图。(是的,我对设备进行了出厂重置。)最后我还添加了一个看门狗计数器来检查WifiManager.isWifiEnabled()以了解更改。当然,这总是会有点延迟。

如果您这样做,请不要忘记从您的再次删除对同一实例的回调,因为如果您的代码在确实声明了意图的设备上执行,则不会两次处理事件。RunnableHandlerBroadcastReceiver

于 2016-08-30T07:49:05.977 回答