新人社内SEのメモ書き

琵琶湖生まれ琵琶湖育ち。京都の産業用機器メーカの社内SE。自身の体験した事や勉強したことなど記事にしてます。自作PCとドライブが大好き。

[Android6.0]Wi-Fiビーコンをスキャンしても同じ結果になる

動作環境

Android6.0(API23)

現象

以前、ここにアップしたこと延長です。今回は、Android 6.0 で数秒間隔で端末周辺のアクセスポイントから発せられるWi-Fiビーコンを受信して、その情報を表示したいなと思って開発を進める中で、序盤の方はWi-Fiビーコンを受信して毎回異なる情報を表示できていました。 しかし、ここ数日Wi-Fiビーコンを受信してデータを表示しても、以下の様にすべてのアクセスポイントのSSID・BSSID・受信電力・タイムスタンプが同じになっていました。(内容は適当に書き換えました)

===================1回目=============================
スキャン開始
[No.]  BSSID               SSID    Level    Timestamp
[0]    aa.aa.aa.aa.aa.aa   LAN1    -45      123456789
[1]    bb.bb.bb.bb.bb.bb   LAN2    -58      234116784
===================2回目=============================
スキャン開始
[No.]  BSSID               SSID    Level    Timestamp
[0]    aa.aa.aa.aa.aa.aa   LAN1    -45      123456789
[1]    bb.bb.bb.bb.bb.bb   LAN2    -58      234116784

ビーコンデータを格納する配列を初期化し忘れているのかな?って思ってnullをいれたり空文字を入れたり試行錯誤しましたが、結果は変わらず...... もしかして、Androidの開発者設定とか触っておかしくなっちゃったかな?と思い、Googleストアに出ているWi-Fiアナライザーアプリを入れて確認すると、周囲のWi-Fiビーコンを間違いなく表示できていました。 あと思い当たる節としては、WifiManagerクラスの使い方を間違ってるのかと思い、一からAndroidデベロッパーサイトを読みました。 間違いなく、getScanResults()で最新のアクセスポイントスキャンの結果を返すと書いてるし.....

public void WifiScan(){
   /* 初期化 */
   for(int i=0 ; i<MAX ; i++){
      sortResult[i] = null;
   }
   List<ScanResult> scanResults = wifiManager.getScanResults();
   sort(); //wifiビーコンを受信電力で降順ソート
   log(); //wifiResults内のデータを表示
}

しっかり変数にgetScanResults()で代入してるしなぁと思いながら、Androidデベロッパーサイトを眺めていると、getScanResults()の説明にスキャン結果を返すと書いていてもスキャンするとは書いてないのを気づき、メソッドすべて目を通すとstartScan()というメソッドを見つけました。 とりえあず、自身のコード内の初期化のためのfor文終了後に追記して、実行すると、なんと毎回Wi-Fiビーコンの結果が変わってるじゃないですか。 開発序盤では、これらのことが起きてなかったので、ほんとに今回は悩みました。私の、卒業研究もほぼほぼ終盤ですので、来年から始まる仕事とかでAndroidアプリ開発をしない限りは、もうAndroidさわらなさそう。