2

我正在尝试编写一些代码来断开当前的 wifi 网络(如果有)并重新连接到具有已知 SSID 的特定 wifi 网络。

我一直在关注这里使用的代码;如何以编程方式连接到 Android 中的特定 Wi-Fi 网络?

这有效,但连接需要几秒钟,最多约 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 以更快地连接到这个?

谢谢

4

2 回答 2

0

我认为这段代码对你有帮助..

@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);
    }
}

}

于 2012-04-05T13:40:47.777 回答
-1

您是否尝试过添加startScan()到您的例程以在您希望连接时强制立即重新扫描可用网络?我想用 alarmManager 或类似的东西反复强制执行该命令是可能的,但我认为这可能会对性能/电池产生昂贵的影响。如果你有一个特定的触发器,它可能是一个解决方案。

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

于 2014-02-24T06:33:15.643 回答