特定のアプリ起動時、特定のWi-Fiスポットに自動接続するというアプリを考えています。

Android または iPhone アプリのプログラム上から、無線LANアクセスポイントの検索、および検索された任意の Wi-Fi
ネットワークへの接続は可能でしょうか。
CC BY-SA 3.0
2015-01-19T03:15:49.323
4810
2015-01-19T14:30:29.877
2015-01-19T03:42:42.753
4978
7536
question
android iphone
Android / iPhone アプリから、 Wi-Fi 検索と接続は可能ですか
iosのみに関してですが、出来ないと思います。  
もしそれが可能になってしまうと、セキュリティ的にも大きな問題になってしまいます。

英語ですが、こちらに同様の質問がありました。  
<https://stackoverflow.com/questions/12619257/iphone-how-to-auto-connect-to-a-
known-wifi-ssid>
CC BY-SA 3.0
2015-01-19T03:31:26.373
4814
2015-01-19T03:31:26.373
2017-05-23T12:38:55.307
-1
2772
4810
answer
やりたいこととは違うかもしれませんが、  
iOSの場合は、接続したいWi-FiのSSIDが事前に分かる（かつ変わらない）のであれば、  
構成プロファイルを用意して接続を簡単にすることは可能です。  
ただ、アプリを使用しているユーザーにインストールして貰う必要はあります。

イメージ的には下記リンク先の製品のような感じになります。  
<http://121ware.com/product/atermstation/special/rakuraku_qr_ios/page2.html>

プロファイルの設定についてはこの辺が参考になるかもしれません。  
<http://www.atmarkit.co.jp/ait/articles/1210/17/news082.html>  
<https://developer.apple.com/jp/devcenter/ios/library/documentation/iPhoneConfigurationProfileRef.pdf>
(62ページあたり)
CC BY-SA 3.0
2015-01-19T06:04:26.923
4828
2015-01-19T08:27:07.647
2015-01-19T08:27:07.647
3516
3516
4810
answer
iosばかり人気でAndroidの実装方法が載ってなかったので書かせていただきます。

[**WiFi接続まわりで苦戦したのでメモ**](http://blog.dtdweb.com/2013/03/08/android-wifi-
network/)というブログの実装が凄く参考になる。お勧めです。  
SSID名が決まっているなら、オープンか、ステルスを問わず、上記の情報で十分かと存じます。

蛇足という名の補足。

### 無線LANアクセスポイントの検索方法

→[Android Wi-Fi
Tutorial](http://www.tutorialspoint.com/android/android_wi_fi.htm)の下の方、  
`mainWifiObj.getScanResults`とかいてあるあたりがホットスポットの検索をしているところです。ただ、この場合hiddenSSIDの検索はできないので注意が必要です。  
また、大前提として **端末の設定でWiFiがONになっていないとSSIDの検索結果、スキャン結果はどんな方法を用いても全てnullが返ってきたはず**
です。(嘘をついていたら、訂正してください)  
端末のWiFi設定をONにする方法は簡単に実装できますが、一般ユーザに対してWiFiをONにしますよ、とどのようにクッションを設けて通知するかは正直、難しい課題なのかなぁ、と存じます。

### Wi-Fi ネットワークへの接続を検知する方法

→[How to detect when WIFI Connection has been established in
Android?](https://stackoverflow.com/questions/5888502/how-to-detect-when-wifi-
connection-has-been-established-in-android)の  
二番目に多い投票数の回答を自分は実装しました。

### Android端末のWi-FiがONになったことを検知する方法

上記ブログに掲載されていた、WiFi機能をONにするのは`端末によっては、切り替わるまで少々時間もかかるようなんで注意も必要ですね。`という話に関連して。  
これは`android.net.wifi.WIFI_STATE_CHANGED`をbroadcastに設定してWifiManager.WIFI_STATE_ENABLEDがintentとしてキャッチされるのを待てば、良いと思います。上記に上げたワードでググればとりあえず実装が出てきます。  
...社内で開発用のサポートアプリとして実装した時は、Huaweiというメーカーの端末がintentを通知するまでが凄く長かったので、途中で処理が落ちることを前提として機械的に接続回数を5回程度リトライするようにし、疎通のリッスンを諦めた記憶があります。

以上、ご参考になれば幸いです。
CC BY-SA 3.0
2015-01-19T14:30:29.877
4854
2015-01-19T14:30:29.877
2017-05-23T12:38:56.467
-1
2904
4810
answer