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>



このページへのコメント

askaです.
回答遅くなってすみません.

APが見つからないことと, リスト表示されないことを分けて考えましょう.
・近くにAPがあるとして, apsにAP情報が登録されるかどうか, Log出力して確認してみてください.
・apsのリストにAP情報があるなら, それをListActivityで表示しているだけです. ListActivity使われてますか?

0
Posted by  moonlight_aska moonlight_aska 2019年01月27日(日) 23:05:16 返信

連続で申し訳ございません。
layoutのactivity○○.xmlを教えていただけませんでしょうか。
また、作成するファイルは2つでよいのでしょうか。
こちらもご教授いただけるとうれしいです。よろしくお願いいたします。

0
Posted by さやか 2019年01月17日(木) 20:04:01 返信

初めまして、さやかと申します。
初めてコメントさせていただきます。
今、この記事のプログラムを作成しているのですが、リストが上手く表示されていないのか、実行しても実機になにも表示されません。
お忙しいとは思いますが、なにとぞご教授お願いいたします。

0
Posted by さやか 2019年01月17日(木) 19:29:35 返信

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

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

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

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

askaです.

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

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

頑張ってください!!

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

コメントをかく


「http://」を含む投稿は禁止されています。

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

Menu


逆引き(基礎編)

画面表示/操作(49)

フラグメント(1)

逆引き(応用編)

Firebase(2)

AD



管理人/副管理人のみ編集できます