C/C++プログラマの管理者が, Androidプログラムにチャレンジ. AndroidプログラミングのTipsをメモっていく予定です.

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>



このページへのコメント

お忙しいところお返事ありがとうございます。

表示方法をListViewに変えたところ問題なくできるようになりました。

ありがとうございました!

Posted by とうきび 2015年10月28日(水) 07:11:07

askaです.

どのような実装をされているかわからないので,
こちらではエラー原因はわかりません.

エラーが発生したら, まずLogCatの表示を確認しましょう.
どこでどんなエラーが発生しているかがわかるはずです.

頑張ってください!!

Posted by aska 2015年10月27日(火) 21:31:37

こんばんわ

すみません、また質問なのですがこちらのwifiのAPをスキャンするプログラムでボタンを配置しようと考え、setContenViewを記述したところプログラムにエラーは出ないのですが、アプリが強制終了してしまうのですが何が原因なのでしょうか?

どうぞよろしくお願いします。

Posted by とうきび 2015年10月27日(火) 04:22:17

ありがとうございます!
がんばります!

Posted by とうきび 2015年10月22日(木) 03:21:52

askaです.

測定結果をDBに書き込むのであれば, AndroidではSQLiteOpenHelperクラスや
SQLiteDatabaseクラスを利用することでデータベースを作成できます.
Android & SQLiteで検索すると実装例がすぐに見つかるはずです.

もっと簡単にファイルにテキストで測定値を書き出すだけであれば,
このWikiの「データ処理」>「ファイルに書き込む」を参照してください.

Posted by aska 2015年10月20日(火) 23:54:22

コメントをかく


ユーザーIDでかく場合はこちら
「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu


逆引き(基礎編)

画面表示/操作(49)

フラグメント(1)

逆引き(応用編)

AD



管理人のみ編集できます