【问题标题】:Android:How can I check if wifi authenticated or notAndroid:如何检查wifi是否经过身份验证
【发布时间】:2013-04-30 23:42:07
【问题描述】:

我的应用程序在 android 中使用 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 吗?

标签: android android-wifi


【解决方案1】:

【讨论】:

  • 这些答案只检查有效连接,并没有提供足够的细节来断言身份验证是问题所在。我在这篇文章的其他地方评论:“不知道旧的 API,但是当输入错误的密码以确保身份验证是现在隐藏的 API 中的“禁用原因”时,SupplicantState 很少提供足够的转换 - 即我们永远无法知道身份验证是否在最近的 API 中失败”
  • 同意!对于 21 以上的 api,可以使用 ConnectivityManager.NetworkCallback() 检查但是,对于 21 以下的 api,没有解决方案检查,如果有人找到该解决方案,请提供帮助。谢谢。
【解决方案2】:

不要使用

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

代替那个使用

WiFi

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

对于移动网络(3g)

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

因为在 Jelly Beans 上会出现硬编码这样的值的麻烦。

【讨论】:

    【解决方案3】:

    使用SupplicantState

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

    this answer in stackoverflow

    如果COMPLETED - All authentication completed.

    【讨论】:

    • 不知道旧的 API,但是当输入错误的密码以确保身份验证是现在隐藏的 API 中的“禁用原因”时,SupplicantState 很少提供足够的转换 - 即我们永远无法知道身份验证是否在最近的 API 中失败
    • 对我没用,我的设备 wi-fi 未经过身份验证,但此代码每次都返回我 COMPLETED。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多