Android快速切换到已知的无线网络

问题描述:

我想写一些代码,将断开当前的WiFi网络(如果有的话),并重新连接到已知的SSID特定的WiFi网络。Android快速切换到已知的无线网络

我一直在使用这里使用的代码; How do I connect to a specific Wi-Fi network in Android programmatically?

它可以工作,但连接需要几秒钟,最多约10秒钟。

具体来说,我使用的代码如下;

WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
WifiConfiguration config; 

我获得的配置,无论是通过创建一个新的和设置SSID和KeyMgmt为NONE,然后将它添加;

wifiManager.add(config); 

或者通过获取已存在的配置;

List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
for(WifiConfiguration i : list) { 
    if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) { 
     config = i; 
     break; 
    }   
} 

然后我打电话;

wifiManager.disconnect(); 
wifiManager.enableNetwork(i.networkId, true); 
wifiManager.reconnect(); 

我收到检查无线网络连接状态的广播,当我得到一个连我正确的SSID我可以继续,但是,这个过程需要高达10秒,我怎么可以设置config或wifimanager连接这更快?

感谢

+0

您是否找到了您的问题的答案?你有没有试过关闭DHCP来改善连接所需的时间?我想做同样的事情,以快速消费托管在不同网络中的服务,我在想mDNS。 – 2017-01-30 06:28:36

+0

@Hamid此代码是否适用于您,从一个网络切换到另一个网络? – 2017-04-09 07:07:28

+0

使用此代码,再次重新连接到同一网络 – 2017-04-09 07:08:39

我觉得这个代码是帮助你..

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.network_test); 
    context = this; 
    mUpdate = new UpdateTimeTask(); 
    mHandler = new Handler(); 
    mHandler.post(mUpdate); 
    } 
public Boolean isNetAvailable(Context con) { 
    try{ 
     connectivityManager = (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE); 
     wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

     if(wifiInfo.isConnected() || mobileInfo.isConnected()) { 
      return true; 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
      } 
    return false; 
    } 
private class UpdateTimeTask implements Runnable{ 

    public void run() { 
     boolean net = isNetAvailable(context); 


     if(net != false) { 
     Toast.makeText(getBaseContext(), "network Available", Toast.LENGTH_SHORT).show(); 
     } 
     else 
     { 
      Toast.makeText(getBaseContext(), "network Not Available", Toast.LENGTH_SHORT).show(); 
     } 
     mHandler.postDelayed(mUpdate, 30000); 
    } 
} 

}

+0

对不起,我不明白这与我的问题有什么关系。这不是互联网是否连接,我需要知道,我已经可以做到这一点,这是代码似乎做的。我需要一种快速切换wifi的方式,比我使用的当前方法更快,这需要很长时间才能关联。 – Hamid 2012-04-05 16:13:00

您是否尝试过加入startScan()到你的日常迫使可用网络立即重新扫描的时间你想连接?我想象一下,使用alarmManager或类似的东西重复强制执行该命令是可能的,但我认为这有可能导致性能/电池价格昂贵。如果你有一个特定的触发器,它可能是一个解决方案。

请看这里:http://developer.android.com/reference/android/net/wifi/WifiManager.html#startScan()

+0

扫描不是问题。这个问题现在有点老了,但我相信,虽然我不记得,但它是通过静态设置IP解决的,因此它不依赖于DHCP来分配IP,这需要时间。 – Hamid 2014-02-24 12:00:39