Android快速切换到已知的wifi网络

时间:2012-04-05 13:15:22

标签: android networking wifimanager

我正在尝试编写一些代码来断开当前的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连接到这个更快?

由于

2 个答案:

答案 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()