2

インテントでエクストラ経由で渡された SSID を取得して接続するコードがいくつかありますが、現在は渡したものを disabled として設定するだけです。パスしようとしているすべての SSID の im は、以前に接続されています。その原因が SSID の既存のネットワーク構成に既に存在するかどうかはわかりませんが、何か関係がある可能性があります...

package com.wt.checkin;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;

public class WifiSwitcher extends BroadcastReceiver {

    @SuppressWarnings("static-access")
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        Bundle extras = arg1.getExtras();
        WifiManager wifiMan = (WifiManager) arg0
                .getSystemService(Context.WIFI_SERVICE);
        if (wifiMan.getWifiState() == 1) {
            wifiMan.setWifiEnabled(true);
            try {
                Thread.currentThread().sleep(2500);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        WifiConfiguration tmpConfig = new WifiConfiguration();
        tmpConfig.SSID = extras.getString("SSID");
        tmpConfig.status = WifiConfiguration.Status.ENABLED;
        int netId = wifiMan.addNetwork(tmpConfig);
        wifiMan.enableNetwork(netId, true);

    }

}

無効 作業コードは次のとおりです。

package com.wt.checkin;

import java.util.List;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;

public class WifiSwitcher extends BroadcastReceiver {

    @SuppressWarnings("static-access")
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        Bundle extras = arg1.getExtras();
        WifiManager wifiMan = (WifiManager) arg0
                .getSystemService(Context.WIFI_SERVICE);
        if (wifiMan.getWifiState() == 1) {
            wifiMan.setWifiEnabled(true);
            try {
                Thread.currentThread().sleep(2500);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }**
        WifiConfiguration Config = new WifiConfiguration();
        WifiInfo Info = wifiMan.getConnectionInfo();
        String SSID = extras.getString("SSID");
        Config.SSID = "\"" + SSID+"\"";
        wifiMan.addNetwork(Config);
        List<WifiConfiguration> list = wifiMan.getConfiguredNetworks();
        for( WifiConfiguration i : list ) {
            if(i.SSID != null && i.SSID.equals("\"" + SSID + "\"")) {
                 wifiMan.disconnect();
                 wifiMan.enableNetwork(i.networkId, true);
                 wifiMan.reconnect();                

                 break;
            }           
         }

    }

}
4

1 に答える 1

1

同様の問題を経験している他の人のために、この関連する質問を投稿したいと思います: How do I connect to a specific Wi-Fi network in Android programmatic?

OPは非常に似たようなことをしているように見えますが、次の違いに気付きました:

List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
for( WifiConfiguration i : list ) {
    if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
         wm.disconnect(); //not in OP
         wm.enableNetwork(i.networkId, true);
         wm.reconnect(); //not in OP   

         break;
    }           
}

追加する必要があると思われる行に印を付けました。他の SO スレッドで概説されている非常に具体的な方法でも SSID をフォーマットする必要があるようです。

于 2012-08-06T19:14:36.780 に答える