Android wifi 连接问题

来源:互联网 发布:买家淘宝怎么刷心快 编辑:程序博客网 时间:2024/05/22 00:12

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() {@Overridepublic void run() {// TODO Auto-generated method stub//有问题,nullString 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 blocke.printStackTrace();}}while(!mbDestroy);if(msgid >= 0 && mHandler != null)mHandler.sendEmptyMessageDelayed(msgid,10);

在广播内判断当前wifi连接状态:

 private BroadcastReceiver mWifiConnectReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context arg0, Intent intent) {// TODO Auto-generated method stubif (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,如果是并且判定次数超过两次,则表示密码错误

0 0
原创粉丝点击