安卓系统:如何检查wifi是否已经通过身份验证

3

我的应用程序在安卓系统中使用wifi管理器,但是我在一个情况下遇到了错误:WIFI已经打开,但没有通过我们公司的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");

   }

你能发一下你的Logcat吗? - itsrajesh4uguys
3个回答

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

请查看stackoverflow中的这个答案

如果COMPLETED - 所有身份验证已完成。


不了解旧的API,但是当输入错误密码时,SupplicantState很少提供足够的转换来确保身份验证是现在隐藏的API中的“disableReason” - 也就是说,我们永远无法知道最近的API中是否身份验证失败。 - leRobot
对我来说没用,我的设备 Wi-Fi 没有通过认证,但是这段代码每次都返回 COMPLETED。 - Manish Jain

1

1
这些答案仅检查有效连接,并没有提供足够的细节来断言认证是问题所在。我在帖子的其他地方发表的评论:“不知道旧API,但SupplicantState很少提供足够的转换,当输入错误密码时确保身份验证是现在隐藏的API中的“disableReason”-即我们永远无法知道最近API中的身份验证失败。” - leRobot
同意!对于API 21以上,可以使用ConnectivityManager.NetworkCallback()进行检查。然而,对于API 21以下,目前还没有解决方案,如果有人找到了解决方案,请帮忙。谢谢。 - Junia Montana

0

不要使用

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

不要使用那个,改用

对于WiFi

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

针对移动网络(3G)

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

在果冻豆上这样硬编码数值会引起麻烦。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接