Как автоматически подключить 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
и используйте обратный вызов от получателя широковещания к вашей активности для обработки этих результатов.