我正在尝试编写一些代码来断开当前的wifi网络(如果有的话)并重新连接到具有已知SSID的特定wifi网络。
我一直在关注这里使用的代码; 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();
我收到广播收到检查wifi状态,当我连接正确的SSID时我可以继续,但是,这个过程需要10秒钟,我怎么能设置配置或wifimanager连接到这个更快?
由于
答案 0 :(得分:1)
我认为这段代码对你有帮助..
@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);
}
}
}
答案 1 :(得分:-1)
您是否尝试将startScan()
添加到例程中,以便在您希望连接时强制立即重新扫描可用网络?我想可以使用alarmManager或类似的东西重复强制执行该命令,但我认为这可能会产生昂贵的性能/电池影响。如果你有一个特定的触发器,它可能是一个解决方案。
见这里:http://developer.android.com/reference/android/net/wifi/WifiManager.html#startScan()