2017-04-08 83 views
0

我正在学习WifiManager,WifiConfiguration APIs。
我想实现的是我想连接到特定的网络。
这是我的主要任务,连接到特定网络,但是如果我的设备已连接到某个其他网络,我想从网络切换到我的SPECIFIC NETWORK。
这里是片断如何从一个wifi网络切换到另一个android

int networkId ; 
    WifiConfiguration wc = new WifiConfiguration(); 
    wc.SSID = "ABCDEFG"; 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
    wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE); 


    Log.d("Rohit", "Adding wifi config"); 

    networkId = wifiManager.addNetwork(wc); 

    Log.d("Rohit", "Config added\ndisconnecting\nid = "+networkId); 

    wifiManager.disconnect(); 

    Log.d("Rohit", "Disconnected\nNetwork enabling"); 

    wifiManager.enableNetwork(networkId, true); 

    Log.d("Rohit", "enabled\n reconnecting...."); 

    wifiManager.reconnect(); 

    Log.d("Rohit","connected"); 

这里是调试输出

04-08 19:57:49.690 3326-3326/com.example.illuminati.services d /罗希特夏尔:增加无线配置 04-08 19:57:49.964 3326-3326/com.example.illuminati.services D/Rohit:Config added 04-08 19:57:49.964 3326-3326/com.example.illuminati.services D/Rohit:断开连接 04-08 19:57:49.964 3326-3326/com.example.illuminati.services D/Rohit:id = 64 04-08 19:57:49.964 3326-3326/co m.example.illuminati.services D/Rohit:Disconnected 04-08 19:57:49.964 3326-3326/com.example.illuminati.services D/Rohit:Network enabled 04-08 19:57:50.087 3326-3326 /com.example.illuminati.services D/Rohit:启用 04-08 19:57:50.087 3326-3326/com.example.illuminati.services D/Rohit:重新连接... 04-08 19:57: 50.089 3326-3326/com.example.illuminati.services d /罗希特夏尔:连接

如果设备没有连接到它连接到特定网络 任何网络但是,如果它是连接到其它网络被重新连接再次到同一个网络。
我在这里错过了什么?
我在stackoverflow中发现了一个类似的问题,但这并没有帮助。
任何帮助,将不胜感激:)

回答

0

好经过30-40分钟的测试这为我工作了。
我创建了一个单独的方法来禁用当前活动的网络。
但有一点我不明白,在wifiManager.enableNetwork(networkId,true);第二个参数是disableOthers。
所以,如果我使用wifiManager.enableNetwork(networkId,true); ,它应该做我的分开方法完成的技巧。
想法请问?

这里是更新的代码

int networkId ; 
    wifiConfig = getWifiConfig(); 
    wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE); 

    // if(wifiManager.) 

    WifiInfo info = wifiManager.getConnectionInfo(); 
    Log.d("Rohit", "current ssid "+info.getSSID()); 

    boolean disable =disableCurrent(info.getSSID()); 
    // Log.d("Rohit","disabled ?"+disable); 


    Log.d("Rohit", "Adding wifi config"); 
    networkId = wifiManager.addNetwork(wifiConfig); 
    //wifiManager.enableNetwork(networkId, true); 

    wifiManager.disconnect(); 
    Log.d("Rohit", "Config added\ndisconnecting\nid = " + networkId); 
    wifiManager.enableNetwork(networkId, true); 


    Log.d("Rohit", "Disconnected\nNetwork enabling"); 


    Log.d("Rohit", "enabled\n reconnecting...."); 
    wifiManager.reconnect(); 


    Log.d("Rohit", "connected"); 

这里是单独的方法

public boolean disableCurrent(String ssid) 
{ 
    List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks(); 

    for(WifiConfiguration conf : configuredNetworks) 
    { 
     Log.d("Rohit","List "+conf.SSID); 
     if(conf.SSID.equals(ssid)) { 
      Log.d("Rohit","Inside"); 
      wifiManager.disableNetwork(conf.networkId); 
      return true; 
     } 
    } 
    return false; 
} 
相关问题