1. ホーム
  2. アンドロイド

[解決済み】Androidで特定のWi-Fiネットワークにプログラム的に接続するにはどうすればいいですか?

2022-03-28 09:03:43

質問

利用可能なWi-Fiネットワークのリストを表示し、ユーザーが選択したネットワークに接続するアプリを設計したいです。

スキャン結果を表示する部分は実装済みです。今度は、スキャン結果の一覧からユーザーが選択した特定のネットワークに接続したいのです。

どうすればいいのでしょうか?

どのように解決するのですか?

を作成する必要があります。 WifiConfiguration のインスタンスを作成します。

String networkSSID = "test";
String networkPass = "pass";

WifiConfiguration conf = new WifiConfiguration();
conf.SSID = "\"" + networkSSID + "\"";   // Please note the quotes. String should contain ssid in quotes

次に、WEPネットワークの場合、次のようにします。

conf.wepKeys[0] = "\"" + networkPass + "\""; 
conf.wepTxKeyIndex = 0;
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 

WPAネットワークでは、以下のようにパスフレーズを追加する必要があります。

conf.preSharedKey = "\""+ networkPass +"\"";

Openネットワークでは、このようにする必要があります。

conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

その後、Androidのwifiマネージャの設定に追加する必要があります。

WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
wifiManager.addNetwork(conf);

そして最後に、Androidが接続するように、それを有効にする必要があるかもしれません。

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

         break;
    }           
 }

UPD:WEPの場合、パスワードが16進数の場合、引用符で囲む必要はありません。