1

WifiManager を使用して、利用可能な wifi をスキャンしました。

mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        mainWifi.startScan();

ネットワークのリストを取得できます。

しかし、この場合、特定のwifi SSIDに接続しようとすると String hotspot="some_wifi_name";、ホットスポットがWifiConfigに追加されますが、その後、接続中に無限ループに入り、結果を再度スキャンすると、ループが続きます。

以下はBroadcast Receiver、このSSIDを接続するために使用したものです。

class WifiReceiver extends BroadcastReceiver {

    ArrayList<String> connections = new ArrayList<String>();
    WifiConfiguration conf;

    public void onReceive(Context c, Intent intent) {

        WifiManager wifiManager = (WifiManager) c
                .getSystemService(Context.WIFI_SERVICE);

        List<ScanResult> wifiList;
        wifiList = mainWifi.getScanResults();
        for (int i = 0; i < wifiList.size(); i++) {

            String ssid = wifiList.get(i).SSID;
            int rssi = wifiList.get(i).level;
            Log.d("SSID: ", "" + wifiList.get(i).SSID.toString()
                    + " signal: " + rssi);

            if (ssid != null && ssid.equals(hotspot)) {
                Log.d("SSID Hotspot: ",
                        "" + wifiList.get(i).SSID.toString());
                conf = new WifiConfiguration();
                conf.SSID = "\"" + hotspot + "\"";
                conf.allowedKeyManagement
                        .set(WifiConfiguration.KeyMgmt.NONE);
                wifiManager.addNetwork(conf);
            }
        }

        List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();

        loops:
        for (WifiConfiguration j : list) {


            if (j.SSID != null && j.SSID.equals("\"" + hotspot + "\"")) {
                Log.d("Config", "" + j.SSID);
                wifiManager.disconnect();
                wifiManager.enableNetwork(j.networkId, true);

                wifiManager.reconnect();

            }
        }
    }
}

目的の SSID を取得した後、再度 Wi-Fi をスキャンし、無限ループに入ります。どこが間違っているのか .

4

2 に答える 2

1

設定リストに SSID を追加した後、 の登録を解除しましたBroadcastReceiver

そのため、次のスキャンの後、その機能は実行されません。

于 2014-05-29T14:04:49.797 に答える