Can some body help me to solve this issue?
Here is my code, and at mWifi.enableNetwork(netID, true)
it's cannot enable network and cannot auto connect to specified network. So I want to know where I had made a mistake?
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");
}
}
}
}
}
});
}
}
I think you need to add a WifiConfiguration.KeyMgmt
to your WifiConfiguration object. Assuming it's an open network:
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
Also, be cautious in assuming that scan results are available immediately upon exit of your call to startScan()
. The best bet in this case is to add a BroadcastReceiver on WifiManager.SCAN_RESULTS_AVAILABLE_ACTION
and add to it all of your code from mWifi.getScanResults()
forward. You will need to add a call to mWifi.reconnect()
once you get enableNetwork()
to succeed.
As for initializing your WifiConfiguration wc
, I'd love it if you'd consider my post here. Finally, another good answer is here.
try adding remaining information about the network such as allowed ciphers, key Mangement scheme and the PSK (if you are using one)
Secondly check in the configured networks list first to make sure that you don't try to add another network with the same configuration as there is not point doing that.
As a recommendation don't startScan() and wait for it finish. Register for SCAN_RESULTS_AVAILABLE_ACTION
and use a callback from the broadcast receiver to your activity to process those results.
来源:https://stackoverflow.com/questions/10834741/how-to-auto-connect-a-wifi-with-specified-ssid