2012-06-21 53 views
19

我上的應用程序,它的WiFi,在用戶將被要求針對網絡掃描他選擇輸入密碼,如果用戶輸入正確的密碼工作,它連接和行之有效的。但是,當用戶輸入錯誤的密碼,一個新的網絡中添加使用該名稱,並且將無法驗證密碼錯誤的COS和它將是具有身份驗證問題狀態。如何以編程方式在android中忘記無線網絡?

現在,如果用戶試圖再次掃描,並選擇同一網絡,並輸入正確的密碼,它無法連接連雖然密碼現在是正確的,將有禁用狀態,因爲以前的連接仍然顯示出認證問題的狀態。

如何解決這個問題? 有沒有辦法忘記所有使用ConnectivityManager或wifimanager的網絡?或者其他解決方案?

回答

7

WifiManager源代碼,有以下方法:

/* 
* Delete the network in the supplicant config. 
* 
* This function is used instead of a sequence of removeNetwork() 
* and saveConfiguration(). 
* 
* @param config the set of variables that describe the configuration, 
*   contained in a {@link WifiConfiguration} object. 
* @hide 
*/ 

public void forgetNetwork(int netId) { 
    if (netId < 0) { 
     return; 
    } 
    mAsyncChannel.sendMessage(CMD_FORGET_NETWORK, netId); 
} 

但這種方法@hide,所以我們不能使用它。但根據此評論:

此功能是用來代替的removeNetwork()序列和 saveConfiguration()

你可以嘗試使用:removeNetwork()saveConfiguration()代替。

+0

removeNetwork()求解該問題。非常感謝! :) – Aadi

3

您可以使用removeNetwork()方法刪除冗餘網絡連接(儘管我懷疑它們是否具有相同的netId),然後新增連接以避免出現問題。

+2

removeNetwork()解決了這個問題!同時,設置配置,我讀網絡ID給一個變量,從而當網絡連接失敗,我使用'removeNetwork相同的id(刪除它)':) – Aadi

13

是,removeNetwork()作品。我用它來刪除所有網絡。

List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
for(WifiConfiguration i : list) { 
    wifiManager.removeNetwork(i.networkId); 
    wifiManager.saveConfiguration(); 
} 
0

通過這樣做,就可以得到一個列表中配置網絡列表,然後立即執行刪除和保存。

WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
     List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
     for(WifiConfiguration i : list) { 
      wifiManager.removeNetwork(i.networkId); 
      wifiManager.saveConfiguration(); 
     } 
相關問題