任意のアクセスポイントに接続を行いたいとします。
他所のサイトを見ると、WiFiのアクセスポイント一覧を見るには
何が問題って、既に圏外になってるアクセスポイントもびしばし入ってくるんだよね。
そして逆に、存在するけど一度も接続したことのないポイントは出てきません。
つまりこのWifiConfiguration、本体のWiFi設定一覧画面で出てくる「接続履歴あり」っていうアクセスポイントの一覧ということなわけだ。
単純にgetConfiguredNetworks()だけ使って接続しようとすると、電波の届かないアクセスポイントに向かって接続試行するということになりかねません。
同じようにWiFi機器を取得するメソッドとして
本体のWiFi設定一覧画面で「圏外」になっていないアクセスポイントのリストということです。
つまりWiFiの接続先を変更するといった用途に使用するには、基本ScanResultを使った方がいいということです。
しかしここで問題があって、WiFiの接続変更にはNetworkIdが必要なのですが、それがWifiConfigurationにしか入ってないんですよね。
さらにScanResultから直接WifiConfigurationを作成するとかそういう手段がありません。
そのため、これまで繋げたことのないアクセスポイントに接続するには、以下のようなわりかし面倒な手順が必要です。
他所のサイトを見ると、WiFiのアクセスポイント一覧を見るには
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); List<WifiConfiguration> wifiConfigurationList = wifiManager.getConfiguredNetworks();ってすればいいよ、とか書いてあることが多いのですが、これは正確ではありません。
何が問題って、既に圏外になってるアクセスポイントもびしばし入ってくるんだよね。
そして逆に、存在するけど一度も接続したことのないポイントは出てきません。
つまりこのWifiConfiguration、本体のWiFi設定一覧画面で出てくる「接続履歴あり」っていうアクセスポイントの一覧ということなわけだ。
単純にgetConfiguredNetworks()だけ使って接続しようとすると、電波の届かないアクセスポイントに向かって接続試行するということになりかねません。
同じようにWiFi機器を取得するメソッドとして
List<ScanResult> wifiManager.ScanResult();ってのがありますが、こちらは現在電波が入っているアクセスポイントの一覧を持ってきます。
本体のWiFi設定一覧画面で「圏外」になっていないアクセスポイントのリストということです。
つまりWiFiの接続先を変更するといった用途に使用するには、基本ScanResultを使った方がいいということです。
しかしここで問題があって、WiFiの接続変更にはNetworkIdが必要なのですが、それがWifiConfigurationにしか入ってないんですよね。
さらにScanResultから直接WifiConfigurationを作成するとかそういう手段がありません。
そのため、これまで繋げたことのないアクセスポイントに接続するには、以下のようなわりかし面倒な手順が必要です。
// WifiManager WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); // 現在電波の入っているアクセスポイント一覧 List<ScanResult> listScanResult = wifiManager.ScanResult(); // 接続したいScanResultを選択する。今回は最初に出てきたの ScanResult scanResult = listScanResult[0]; // WifiConfigurationを作る WifiConfiguration wifiConfiguration = new WifiConfiguration(); wifiConfiguration.SSID = "\"" + scanResult.SSID + "\"" //何故か\がつく /* 略 */ // 作ったWifiConfigurationをWifiManagerに登録 wifiManager.addNetwork(wifiConfiguration); wifiManager.saveConfiguration(); // 接続変更を実行 wifiManager.updateNetwork(wifiConfiguration); wifiManager.enableNetwork(wifiConfiguration.networkId, true);なんで
WifiConfiguration wifiConfiguration = scanResult.getWifiConfiguration();的なメソッドが無いのでしょうか。
PR