2013-05-07 95 views
3

我的应用程序在Android中使用wifi管理器,但是在情况下我面临错误:: WIFI已打开但未通过身份验证(与我们公司当时的WiFi用户名和密码),我的应用程序强制关闭,Android:我如何检查WiFi是否已通过验证

的代码,我现在用的就是

try{ 
    if (connectivityManager != null && 
     (connectivityManager.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) || 
     (connectivityManager.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)) 
    { 
     //You are connected, do something online. 
     return true; 
    } 
    else if (connectivityManager.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || 
      connectivityManager.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) 
    {    
     //Not connected.   
     //Toast.makeText(getApplicationContext(), "You must be connected to the internet", Toast.LENGTH_LONG).show(); 
     loginTask.myPublishProgress("You must be connected to the internet"); 
     return false; 
    } 
    } 
catch(NullPointerException ae) 
    { 
     ae.printStackTrace(); 
     loginTask.myPublishProgress("You must be connected to the internet"); 

    } 
+0

你可以发布你的logcat吗? – itsrajesh4uguys 2013-05-07 05:50:28

回答

1
+0

这些答案只检查有效的连接,并没有提供足够的细节来断言认证是问题。我在这篇文章的其他地方发表评论:“不知道旧的API,但SupplicantState很少提供足够的转换,当输入错误密码以确保在现在隐藏的API中认证是”disableReason“时 - 也就是说我们永远不会知道认证最近的API失败“ – leRobot 2016-05-09 10:37:22

1

使用SupplicantState

SupplicantState supState; 
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
supState = wifiInfo.getSupplicantState(); 

this answer in stackoverflow

如果COMPLETED - All authentication completed.

+0

不了解旧的API,但SupplicantState在输入错误密码时很少提供足够的转换,以确保认证是现在隐藏的API中的“disableReason” - 即我们永远不知道最近API中的认证是否失败 – leRobot 2016-05-09 10:36:37

+0

没用对我来说,我的设备无线网络没有通过验证,但是这段代码每次都会返回COMPLETED。 – 2016-09-01 12:18:00

0

不要使用

conectivityManager.getNetworkInfo(0) and getNetworkInfo(1). 

取而代之的是使用

支持WiFi

NetworkInfo conectivityManager = connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

对于移动网络上的糖豆(3G)

NetworkInfo conectivityManager = connectivity.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

原因会做出那样的麻烦硬编码值。

相关问题