Как автоматически подключить WiFi с указанным SSID?

Может ли какой-нибудь орган помочь мне решить эту проблему?

Вот мой код, и в mWifi.enableNetwork(netID, true) он не может включить сеть и не может автоматически подключиться к указанной сети. Итак, я хочу знать, где я допустил ошибку?

    public class WifiConnActivity extends Activity {
    /** Called when the activity is first created. */
    final String tag = "WifiConn:...";
    EditText txt;
    WifiManager mWifi;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mWifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);

        txt = (EditText)findViewById(R.id.editText1);

        Button b1 = (Button)findViewById(R.id.B1);        
        b1.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v)
            {

                if (mWifi.startScan())  //scan now
                {
                    Log.d(tag, "startScan()");

                    List<ScanResult> sRet = mWifi.getScanResults();  //scan results.

                    for (int i=0; i<sRet.size(); i++)
                    {
                        ScanResult retS = sRet.get(i); 
                        txt.append("resT: " + retS.SSID +" " + retS.BSSID + "\n");
                        Log.d(tag, "resT: " + retS.SSID +" " + retS.BSSID);

                        if (retS.SSID.equalsIgnoreCase("TEST"))
                        {
                            txt.append("Found: " + retS.SSID +" " + retS.BSSID + "\n");

                            WifiConfiguration wc = new WifiConfiguration();

                            wc.SSID = "\""+retS.SSID+"\"";
                            wc.BSSID = retS.BSSID;
                            wc.status = WifiConfiguration.Status.ENABLED;
                            wc.hiddenSSID = true;

                            int netID = mWifi.addNetwork(wc); // add network
                            txt.append("addNetwork: "+ Integer.toString(netID) +"\n");

                            if(mWifi.enableNetwork(netID, true)) // enable network, but cannot work???????????
                            {
                                txt.append("enableNetwork: true\n");
                            }
                        }
                    }

                }
            }

        });      
    }
}

2 ответа

Решение

Я думаю, что вам нужно добавить WifiConfiguration.KeyMgmt на ваш объект WifiConfiguration. Предполагая, что это открытая сеть:

wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

Кроме того, будьте осторожны, предполагая, что результаты сканирования доступны сразу после выхода из вашего звонка startScan(), Лучше всего в этом случае добавить BroadcastReceiver на WifiManager.SCAN_RESULTS_AVAILABLE_ACTION и добавьте к нему весь свой код из mWifi.getScanResults() вперед. Вам нужно будет добавить звонок mWifi.reconnect() как только вы получите enableNetwork() преуспеть.

Что касается инициализации вашего WifiConfiguration wc Я был бы рад, если бы вы рассмотрели мой пост здесь. Наконец, еще один хороший ответ здесь.

Попробуйте добавить оставшуюся информацию о сети, такую ​​как разрешенные шифры, схема управления ключами и PSK (если вы ее используете)

Во-вторых, сначала проверьте список настроенных сетей, чтобы убедиться, что вы не пытаетесь добавить другую сеть с такой же конфигурацией, так как нет смысла делать это.

В качестве рекомендации не запускайте Scan() и дождитесь его окончания. Зарегистрируйтесь для SCAN_RESULTS_AVAILABLE_ACTION и используйте обратный вызов от получателя широковещания к вашей активности для обработки этих результатов.

Другие вопросы по тегам