SUPPLICANT_CONNECTION_CHANGE_ACTION从未收到过

时间:2016-01-15 01:46:11

标签: android android-wifi android-broadcastreceiver

我希望在设备切换网络时收到通知,但由于一些奇怪的原因,尽管SO上有文档和各种示例,但此特定操作永远不会发送到我的接收器。

这是我的代码

RECEIVER:

BroadcastReceiver connectedToLocalWifiReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            Log.d(TAG, "ACTION='" + action +"'"); //<-- WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION never turns up here
            if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
                if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)){
                    //this block of code is never called

                } else {
                    // ditto for this block
                }
            }
        }
    };

REGISTERING: 在我连接到网络之前的代码中,我注册了我的接收器。我已经尝试将其注册到其他操作并且它们确实出现了(例如ConnectivityManager.CONNECTIVITY_ACTION)但是对于SUPPLICANT_CONNECTION_CHANGE_ACTION我什么也没得到。

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
registerReceiver(connectedToLocalWifiReceiver, intentFilter);
wifiManager.enableNetwork(i.networkId, true);
wifiManager.reconnect();

所以在这一点上,wifi实际上与其当前网络断开连接并连接到我指定的那个,但它没有广播任何东西。

我看不出任何明显错误的东西,但必须遗漏一些非常重要的东西。

我的清单权限是这样设置的,虽然我不知道如何,因为它实际上正确地切换了wifi,权限可能与它有任何关系了:

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

很想知道我忽略了什么。

1 个答案:

答案 0 :(得分:5)

我遇到了类似的问题并设法解决了。

我使用SUPPLICANT_CONNECTION_CHANGE_ACTION代替registerReceiver(new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { Log.v(LOG_TAG, "onReceive"); if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { Log.d(LOG_TAG, "network state was changed"); NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); if (networkInfo.getState() == NetworkInfo.State.CONNECTED) { Log.d(LOG_TAG, "network connection has been established"); // the receiver is no longer needed, so unregist it immediately. unregisterReceiver(this); // do something... } } } }, new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION));

{{1}}

注意:我没有设置任何其他权限。