Androidプログラマへの道 〜 Moonlight 明日香 〜 - WiFiのAPをスキャンする
WiFiのアクセスポイントをスキャンするには, WifiManagerクラスを利用する.



APのスキャン

  • WifiManager02.java
    • getSystemServiceメソッドで, WIFI_SERVICEを指定してWifiManagerのインスタンスを取得する.
    • WifiManager#startScanメソッドで, APのスキャンを開始する.
    • WifiManager#getScanResultメソッドで, スキャン結果を取得する.
    • ScanResult#getメソッドで, スキャン結果を取り出す.
以下の情報が取得できる.
BSSIDAPのMACアドレス
SSIDネットワーク名
capabilities暗号化情報
frequencyチャンネル周波数(MHz)
level信号レベル(dBm)
package com.moonlight_aska.android.wifimanager02;

import java.util.List;
import android.app.ListActivity;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class WifiManager02 extends ListActivity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    WifiManager manager = (WifiManager)getSystemService(WIFI_SERVICE);
    if(manager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {
      // APをスキャン
      manager.startScan();
      // スキャン結果を取得
      List<ScanResult> apList = manager.getScanResults();
      String[] aps = new String[apList.size()];
      for(int i=0; i<apList.size(); i++) {
        aps[i] = "SSID:" + apList.get(i).SSID + "\n"
          + apList.get(i).frequency + "MHz " + apList.get(i).level + "dBm";
      }
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, aps);
      setListAdapter(adapter);
    }
  }
}
  • AndroidManifest.xml
    • Wifiの状態を参照するには, "android.permission.ACCESS_WIFI_STATE"パーミションを設定する.
    • Wifiの状態を変更するには, "android.permission.CHANGE_WIFI_STATE"パーミションを設定する.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.moonlight_aska.android.wifismanager02"
   android:versionCode="1"
   android:versionName="1.0">
  <uses-sdk android:minSdkVersion="4" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>

  <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".WifiManager02"
       android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>
</manifest>