2013-05-07 97 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); 

原因會做出那樣的麻煩硬編碼值。

相關問題