2.如何知道WIFI是否已连接上
(1)enableNetwork(res, true)的返回值只是这个函数是否执行成功,当密码错误但是输入密码长度足够时这个函数仍会返回true,所以不代表是否已连上WIFI
(2)收到NETWORK_STATE_CHANGED_ACTION消息的情况有多种 未连接---------->已连接 未连接/已连接 ---------->WIFI关闭
所以在收到 NETWORK_STATE_CHANGED_ACTION之后需判断WIFI是否已真正连接上,判断方法为
public boolean isWifiConnect() {
ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo ni = connManager.getActiveNetworkInfo();
return (ni != null && ni.isConnectedOrConnecting());
}
返回为true表示已连接,反之则未连接
所以通过以下方式判断wifi是否正确连接
mWifiManager.addNetwork(
mWifiManager.CreateWifiInfo(
result.SSID,
passwordstr,
3));
mThreads.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//有问题,null
String ssid;
do {
ssid = mWifiManager.getWifiInfo().getSSID();
if(ssid != null && (ssid.equals(result.SSID)
|| ssid.equals('"'+result.SSID+'"'))&&mWifiManager.isWifiConnect())
break;
try {
Thread.sleep(1000);
OutputDebug.OutputDebugLogD(MYLOG, "msgid:"+msgid+" ssid:"+ssid +" result.SSID:"+result.SSID);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}while(!mbDestroy);
if(msgid >= 0 && mHandler != null)
mHandler.sendEmptyMessageDelayed(msgid,10);
在广播内判断当前wifi连接状态:
private BroadcastReceiver mWifiConnectReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent intent) {
// TODO Auto-generated method stub
if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
int message = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1);
switch (message) {
case WifiManager.WIFI_STATE_DISABLED:
//Toast.makeText(getApplicationContext(), "不可用", Toast.LENGTH_SHORT).show();
break;
case WifiManager.WIFI_STATE_DISABLING:
//Toast.makeText(getApplicationContext(), "正在关闭或者断开", Toast.LENGTH_SHORT).show();
break;
case WifiManager.WIFI_STATE_ENABLED:
//Toast.makeText(getApplicationContext(), "可用", Toast.LENGTH_SHORT).show();
break;
case WifiManager.WIFI_STATE_ENABLING:
//Toast.makeText(getApplicationContext(), "正在打开或者连接", Toast.LENGTH_SHORT).show();
break;
case WifiManager.WIFI_STATE_UNKNOWN:
//Toast.makeText(getApplicationContext(), "未知", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}else if(intent.getAction().equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
WifiInfo wifiInfo = mWifiManager.getWifiInfo();
state = wifiInfo.getSupplicantState();
String str = "";
if(state == SupplicantState.SCANNING) {
str = "正在扫描";
}
if(state == SupplicantState.ASSOCIATED) {
str = "关联AP成功";
}else if(state.toString().equals("AUTHENTICATING")) {
str = "正在验证";
}else if(state == SupplicantState.ASSOCIATING) {
str = "正在关联AP...";
}else if(state == SupplicantState.COMPLETED) {
str = "连接成功";
}else if(state == SupplicantState.INACTIVE) {
}
else if(state.toString().equals("DISCONNECTED")){
OutputDebug.OutputDebugLogD(STORAGE_SERVICE,mConnectCount+"");
if(mConnectCount <1)
mConnectCount++;
else {
Toast.makeText(getApplicationContext(), "密码错误", Toast.LENGTH_SHORT).show();
}
}
OutputDebug.OutputDebugLogD(STORAGE_SERVICE, "state:"+state);
//Toast.makeText(getApplicationContext(),str, Toast.LENGTH_SHORT).show();
}
}
};
循环扫描网络,连接成功后退出循环,否则在广播WifiManager.SUPPLICANT_STATE_CHANGED_ACTION判断当前state的值是否为DISCONNECTED,如果是并且判定次数超过两次,则表示密码错误
最后
以上就是听话便当最近收集整理的关于Android wifi 连接问题的全部内容,更多相关Android内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复