如何使用指定的SSID自动连接WiFi?

时间:2012-05-31 13:35:52

标签: java android android-wifi

有人可以帮我解决这个问题吗?

这是我的代码,在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 个答案:

答案 0 :(得分:2)

我认为您需要在WifiConfiguration对象中添加WifiConfiguration.KeyMgmt。假设它是一个开放的网络:

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

另外,请谨慎对待startScan()呼叫退出后立即提供扫描结果。在这种情况下,最好的选择是在WifiManager.SCAN_RESULTS_AVAILABLE_ACTION上添加一个BroadcastReceiver,并将mWifi.getScanResults()转发的所有代码添加到其中。一旦成功mWifi.reconnect(),您就需要向enableNetwork()添加电话。

至于初始化WifiConfiguration wc,如果您考虑我的帖子here,我会很喜欢。最后,另一个好的答案是here

答案 1 :(得分:0)

尝试添加有关网络的剩余信息,例如允许的密码,密钥管理方案和PSK(如果您使用的话)

首先检查配置的网络列表,确保不要尝试添加具有相同配置的其他网络,因为没有点这样做。

作为建议,不要使用startScan()并等待它完成。注册SCAN_RESULTS_AVAILABLE_ACTION并使用广播接收器的回调到您的活动来处理这些结果。