忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/08/20 07:35 |
Android2.3 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


2012/11/16 23:29 | Comments(0) | Android

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<今週の実績 2012/11/18 | HOME | デッドアイランド ZOTY脱出記 1日目>>
忍者ブログ[PR]