android连接到wifi WifiManager.SUPPLICANT_STATE_CHANGED_ACTION奇怪的问题

时间:2015-07-20 22:54:43

标签: java android broadcastreceiver wifimanager

尝试连接无线网络时遇到问题。 我的代码工作正常我成功连接到网络,以及下面描述的问题。

我有一个listview whit wifi扫描结果。

当我第一次点击我的接收器未达到“已完成”状态时。 点击第二次,然后,在没有选择任何网络的情况下连接,我的代码在“完成”内执行。

下面的代码是从另一个类中调用的,这是为什么它是静态的

Coonect Code:

 public static boolean connect(String ssid,String password)
{

    String networkSSID = ssid;
    String networkPass = password;
    WifiConfiguration conf = new WifiConfiguration();
    conf.SSID = "\"" + networkSSID + "\"";
    conf.preSharedKey = "\""+ networkPass +"\"";
    //WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
    int netid=mainWifi.addNetwork(conf);
    mainWifi.disconnect();
    mainWifi.enableNetwork(netid, true);

    //mainWifi.reconnect(); <-- exact the same issue discommenting this line
 return true;
}

在课堂上连接被称为我已注册BradcastReceiver如下:

 public void onClick(View v)
        {

            mainWifi = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            wifiinfo = mainWifi.getConnectionInfo();
            AuthWifi authWifi = new AuthWifi();
            IntentFilter mIntentFilter = new IntentFilter();
            mIntentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
            getApplicationContext().registerReceiver(authWifi, mIntentFilter);
            ClientManager.scan(CameraActivity.this, mainWifi);
        }

我的广播接收器

public class AuthWifi extends BroadcastReceiver {
    @Override
    public void onReceive(Context c, Intent intent) {
        String action = intent.getAction();
        if (action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {

            SupplicantState supl_state = ((SupplicantState) intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE));
            switch (supl_state) {

                case COMPLETED:
                  /////////////IF I AM CONNECTED THE WIFI SSID I CHOSE FROM A LISTVIEW THEN ---->
                    if(wifiinfo != null & wifiinfo.getSSID()!=null & ClientManager.getSSID() !=null& !conectado ) {

                        if (wifiinfo.getSSID().contains(ClientManager.getSSID().trim())) ///I know here is better .equals() /// I have contain for my own reasons
                            conectado = true;

/*HERE I DO SOME THINGS WHEN CONNECTED (I CALL A RUNNABLE TO MAKE A SERVER SOCKET)*/


                        }
                    }
                    break;
                case DISCONNECTED:
                    Log.i("SupplicantState", "Disconnected");

                    conectado = false;
                    if (ClientStartReceive.isStopped)
                    {
                        ClientStartReceive.stop();
                    }
                    break;

                default:
                    Log.i("SupplicantState", "Unknown");
                    break;

            }
            int supl_error = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, -1);
            if (supl_error == WifiManager.ERROR_AUTHENTICATING) {

 /////HERE I MANAGE AUTHENTICATION ERROR

            }
        }
    }
}

希望有人能够提供帮助:(如果您需要更多代码进行故障排除,请告诉我们。 如果你有一些参考来帮助我,即使我需要重建代码也被接受..我的目标是能够连接到网络,显示身份验证错误并在连接susscess上执行一些代码。 对不起我的英语我觉得你已经成功了我不是本地人。 此致

1 个答案:

答案 0 :(得分:0)

正如文件表明“完成”使用如下:

  

此状态表示请求方已完成对关联阶段的处理,并且数据连接已完全配置。但请注意,可能没有与该连接关联的任何IP地址。

您不应该依赖此状态来确保您的连接已完成。相反,您可以注册BroadcastReceiver侦听器以进行网络状态更改。