我有一个问题,当尝试连接到无线网络。我的代码工作正常,我成功地连接到网络,但出现了下面描述的问题。
我有一个wifi扫描结果的列表视图。
当我第一次点击时,我的接收器没有得到"完成"状态。点击第二次后,并且,没有选择任何网络,它连接和我的代码内的"完成"被执行。
下面的代码是从另一个类调用的,有三个原因可以解释为什么它是静态的
Coonect代码:
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);
}
my broadcast receiver
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
}
}
}
}
希望有人能够帮助:(如果你需要更多的代码来排除故障,请让我知道。如果你有一些参考来帮助我,即使我需要重建代码也被接受…我的目标是能够连接到网络,显示身份验证错误,并在连接成功时执行一些代码。抱歉我的英语不好,我想你已经猜到我不是本地人了。关于
如doc所示," COMPLETED "的用法如下:
此状态表示请求方已完成关联阶段的处理,并且数据连接已完全配置。但是请注意,可能还没有任何IP地址与该连接相关联。
您不应该依赖此状态来确保您的连接已完成。相反,您可以注册BroadcastReceiver侦听器,以用于网络状态更改。