我是靠谱客的博主 听话便当,这篇文章主要介绍Android wifi 连接问题,现在分享给大家,希望可以做个参考。

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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部