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连接这更快?
感谢
我觉得这个代码是帮助你..
@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);
}
}
}
对不起,我不明白这与我的问题有什么关系。这不是互联网是否连接,我需要知道,我已经可以做到这一点,这是代码似乎做的。我需要一种快速切换wifi的方式,比我使用的当前方法更快,这需要很长时间才能关联。 – Hamid 2012-04-05 16:13:00
您是否尝试过加入startScan()
到你的日常迫使可用网络立即重新扫描的时间你想连接?我想象一下,使用alarmManager或类似的东西重复强制执行该命令是可能的,但我认为这有可能导致性能/电池价格昂贵。如果你有一个特定的触发器,它可能是一个解决方案。
请看这里:http://developer.android.com/reference/android/net/wifi/WifiManager.html#startScan()
扫描不是问题。这个问题现在有点老了,但我相信,虽然我不记得,但它是通过静态设置IP解决的,因此它不依赖于DHCP来分配IP,这需要时间。 – Hamid 2014-02-24 12:00:39
您是否找到了您的问题的答案?你有没有试过关闭DHCP来改善连接所需的时间?我想做同样的事情,以快速消费托管在不同网络中的服务,我在想mDNS。 – 2017-01-30 06:28:36
@Hamid此代码是否适用于您,从一个网络切换到另一个网络? – 2017-04-09 07:07:28
使用此代码,再次重新连接到同一网络 – 2017-04-09 07:08:39