WifiManager.getConfiguredNetworks always returns empty list

戏子无情 提交于 2019-12-02 08:12:18

问题


I am trying to connect to an open wifi network. When I open my app it should turn on wifi and connect to the network defined as below. The problem is that WifiManager.getConfiguredNetworks always returns me an empty list. I have tried using locks too without success.

WifiConfiguration conf = new WifiConfiguration();
conf.SSID = "\"" + networkSSID + "\"";
conf.status = WifiConfiguration.Status.ENABLED;        
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
conf.priority = Integer.MAX_VALUE;

WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
wifiManager.setWifiEnabled(true);   
wifiManager.addNetwork(conf);


List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
if(list.isEmpty()) 
{
    Log.e("Connection Setup","Empty list returned");
}

for( WifiConfiguration i : list ) {
    if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
    Log.e("Connection Setup",i.SSID+" connrction attempted");
    wifiManager.disconnect();
    wifiManager.enableNetwork(i.networkId, true);
    wifiManager.reconnect();               
    break;
 }           
}

I have been trying more things - if I make this thread sleep for about 10 seconds or so - everything works fine - but is there a better alternative?


回答1:


You can not continue the

CMD wifiManager.getConfiguredNetworks()

until the status of WiFi is enabled completely. For enabling the WiFi it need some time. So you need to delay some time.




回答2:


Try to comment these lines in your code.. do you see any change in result set?

wifiManager.setWifiEnabled(true);   
wifiManager.addNetwork(conf);

You might want to check the return for wifiManager.addNetwork(conf);, is it returning -1.

For me this lines return 31 objects only.. no idea why..still hunting for it.

WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
List<WifiConfiguration> arraylist = wifiManager.getConfiguredNetworks();
Log.wtf("WifiPreference","No of Networks"+arraylist.size());



回答3:


I also met this question unfortunely.

After searching for some time, I think it is a bug.

This is the android implement of getConfiguredNetworks

public List<WifiConfiguration> getConfiguredNetworks() {
    try {
        return mService.getConfiguredNetworks();
    } catch (RemoteException e) {
        return null;
    }
}

It is clearly shown that the function will return null if RemoteException happened when running. Up to now, I am also distressed with this and could not get some points to address this issue.

For more information: https://code.google.com/p/android/issues/detail?id=19078



来源:https://stackoverflow.com/questions/22592353/wifimanager-getconfigurednetworks-always-returns-empty-list

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!