首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android wifimanager总是返回true

Android wifimanager总是返回true
EN

Stack Overflow用户
提问于 2011-03-11 03:23:59
回答 1查看 5.3K关注 0票数 5

这简直要了我的命,任何帮助都将不胜感激。

我想用wifi管理器连接到一个开放的网络。我遇到的问题是,代码声称连接到任何网络-甚至是不存在的网络。下面是使用网络的SSID执行和调用的完整代码。将什么字符串作为网络的SSID传递给它并不重要,即使不存在任何形式的这样的网络,enableNetwork声明也会返回true,我相信这意味着它连接到了网络。

我需要做的是确保我有一个连接。因此,如果我传递的网络SSID不存在(例如,它超出范围),则API在尝试连接时应返回失败。

如有任何想法/提示/建议,我们将不胜感激。

代码语言:javascript
复制
public boolean conto (String network){

    WifiConfiguration wifiConfiguration = new WifiConfiguration();
    wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    List<WifiConfiguration> configs = null;
    int inetId = -1;


    // make sure there are no funny stuff in the config
    configs = wifi.getConfiguredNetworks();
    for (WifiConfiguration config : configs) {
        wifi.removeNetwork(config.networkId);
        Log.d("********", "Removed Network: SSID=[" + config.SSID + "] and ID=[" + config.networkId + "]");

    }

    // Now add the network
    wifiConfiguration.SSID = "\"" + network + "\"";
    wifiConfiguration.hiddenSSID = false;
    //wifiConfiguration.priority = 1;
    //wifiConfiguration.networkId = 999;

    inetId = wifi.addNetwork(wifiConfiguration); 
    if(inetId < 0) {
            Log.d("********", "Could Not Add Network......... [" + wifiConfiguration.SSID + "]"); 

        } 
        else { 

            Log.d("********", "Added Network......... [" + wifiConfiguration.SSID + "]");

            // Lets be paranoid and double check the config file
            Log.d("********", " +++++++++++++++++++++++++ This is what I have in Config File");
            configs = wifi.getConfiguredNetworks();
            for (WifiConfiguration config : configs) {
                Log.d("********", "In the Config file after add, SSID=[" + config.SSID + "], ID=[" + config.networkId + "]");

            }

            // Now Enable the network
            boolean successConnected = wifi.enableNetwork(inetId, true); 
            //boolean successAssociated = wifi.reassociate(); This did not change the results

            if(successConnected) { 
                Log.d("********", "Connected to......... [" + inetId + "]");
            } 
            else { 

                Log.d("********", "Could Not Connect to......... [" + inetId + "]"); 

            } 


        }
        return false;
    }
EN

回答 1

Stack Overflow用户

发布于 2012-11-13 23:10:06

我认为问题在于您的代码是基于这样的假设:连接到WiFi网络是一个同步过程,而事实并非如此。方法enableNetwork()在连接发生时不会阻塞,然后返回连接的结果成功或失败,它会立即返回,结果只是请求是否正确地到达了WiFi服务和请求者。

如果您希望了解设备的连接状态,则需要使用BroadcastReceiver监控WifiManager. SUPPLICANT_STATE_CHANGED_ACTIONWifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION广播意图操作。一旦你启动了连接过程,这些回调就会告诉你事情的进展。例如,如果您传入了一个不存在的网络,则连接状态几乎应该立即变为DISCONNECTED。而一个有效的网络将经历关联、认证和连接的过程。所有这些步骤都通过这些广播列举出来。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5264739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档