安卓 - Wifimanager如何处理wifi连接状态

4

我有一个应用程序,可以通过编程方式连接到WiFi网络。我的问题是,我想处理密码错误的情况。我想在运行时检测密码是否正确。更准确地说,当连接建立时,我有一个进度对话框正在运行,因此如果密码错误,进度对话框将一直显示,并且无法跳过。另外需要注意的是:我使用以下代码处理少于8个字符的密码:

if(!m_wifiManager.enableNetwork(netId, true)) {
            progressDialogConnecting.dismiss();
            createInfoMessageDialog(CONST.WIFI_CON_FAILED_TITLE, CONST.WIFI_CON_FAILED_MSG_CONFAILURE);
            m_wifiManager.reconnect();
            return;
        }

如果wifi连接的密钥少于8个字符,将触发此if-case。但如果它超过8个字符且错误,则会出现无限显示进度对话框的状态。我想要问的是:如何处理1.密码错误2.连接状态(就像Android系统向我显示烤面包“已连接到Wifi xyz”一样)?并且是否可能处理第一个问题(密码错误)?
以下是代码,用于处理连接建立事件,但未能正常工作(这只是wifirecevier,我还在活动中注册了它):
 public class WifiReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
                if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)){
                            if(wrongNetworkConnected)
                            progressDialogConnecting.dismiss();
                        }
                    }
                } else {

                }
            }
        }
    }

编辑:我目前正在做的是,我有一个处理程序告诉我我连接到了谁。这很有用,因为我可以说在重新连接(reconnect())之后,我重新连接到旧网络(当前网络),而不是新网络 - 所以显然密码可能是错误的(或其他原因),因为我无法连接到新网络。

这种方法的问题首先在于它花费太多时间,其次它也不可靠。我可以撒谎并说如果您重新连接到当前网络,则密码错误,但实际上不能百分之百确定您无法重新连接,因为这可能有其他原因。因此,我仍在寻找来自suplicant的简单反馈/处理方式,表明密码错误,就像每个Android设备的wifi设置中的android api一样...

2个回答

3
我的问题是,我想处理密码错误的情况。
经过一些研究,我找到了这篇未标记为已回答但对我非常有效的帖子
以下是程序跳转的if-case(已由我多次测试),如果出现认证错误-->例如:密码错误:
int supl_error=intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, -1);

if(supl_error==WifiManager.ERROR_AUTHENTICATING){
          // DO SOMETHING 
}

注意:如上面链接的帖子所示,此if-case应出现在BroadcastReceiver中,将意图WifiManager.SUPPLICANT_STATE_CHANGED_ACTION添加到您的活动类中的接收器注册中。


1
只是想请你帮忙,如果可能的话。我陷入了同样的困境,问题是EXTRA_SUPPLICANT_ERROR已经被弃用了。我该怎么办? - Anubhav Pandey
'EXTRA_SUPPLICANT_ERROR'已于API 28:Android 9.0(Pie)中弃用。WifiManager.ERROR_AUTHENTICATING也是如此。现在我们应该使用什么,有什么替代品吗?有任何想法吗?我尝试使用WifiManager.NETWORK_STATE_CHANGED_ACTION但没有成功。 - Jonas S.

0
'EXTRA_SUPPLICANT_ERROR'已在API 28(Android 9.0 Pie)中弃用。如果您使用WifiNetworkSuggestion连接到Wifi,请使用WifiManager.SuggestionConnectionStatusListener。在其中重写onConnectionStatus方法,并检查failureReason是否等于WifiManager.STATUS_SUGGESTION_CONNECTION_FAILURE_AUTHENTICATION。
WifiManager.SuggestionConnectionStatusListener mSuggestionConnectionStatusListener = new WifiManager.SuggestionConnectionStatusListener() {
    @Override
    public void onConnectionStatus(@NonNull WifiNetworkSuggestion wifiNetworkSuggestion, int failureReason) {
        switch (failureReason) {
                case WifiManager.STATUS_SUGGESTION_CONNECTION_FAILURE_AUTHENTICATION:
                // authentification handling code here
                break;
    }
};

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