弱い Wi-Fi に Android は戻ってこない

これは 2026/10/23 の社内 LT で話した内容です。大越さんの 最近ハマったPixel Watchのネットワーク設定 の続きのつもりで書いています。

症状

電波の弱い場所で Wi-Fi が一度切れると、Pixel Watch(Android 16)が自動では再接続しませんでした。画面をつけると戻ることはありました。

LT の当日も試しました。電波の弱い場所に置いた時計は、13時17分に切れたあと2時間半戻らず、手に取って画面がついた3秒後に戻りました。

調べると、理由は2つありました。

理由1: 5 GHz は -77 dBm より弱いと自動ではつながらない

dumpsys wifi の ScoringParams という行に、接続に使うしきい値が出ています。

$ adb shell dumpsys wifi | grep ScoringParams
ScoringParams: rssi2=-83:-80:-73:-60,rssi5=-80:-77:-70:-57,rssi6=-80:-77:-70:-57,...

周波数帯ごとにある4つの数字の2番目が、自動接続の候補にしてよい最低の強さです。2.4 GHz は -80 dBm、5 GHz は -77 dBm で、これより弱い AP は見えていても自動接続の候補になりません。いまつながっている AP は対象外なので、効いてくるのは一度切れたあとです。

この値は端末に組み込まれていて、設定では変えられません。昔は wifi_score_params という設定で変えられましたが、Android 11 からは読まれていません。実際に settings put global wifi_score_params ... を入れてみても、ScoringParams の値は変わりませんでした。

理由2: 画面が消えていると、前に見つけたチャンネルしか探さない

画面が消えている間は、PNO という省電力のスキャンで保存済みの Wi-Fi を探します。時計のログには、探しているチャンネルがそのまま出ます。

wificond: Pno scan started for frequencies: 2412, 2417, ... 2462, 5500, 5620

5 GHz は 5500 MHz と 5620 MHz、チャンネルでいうと 100 と 124 の2つだけでした。PNO は、保存済みの Wi-Fi が最近見つかったチャンネルだけを探します。AP が別のチャンネルに移ると、画面が消えている間は見つけられません。チャンネルの記録がないときに使うデフォルトのリストにも、DFS チャンネルは入っていません。また、Android 14 からは画面オフ中の20分ごとのフルスキャンもなくなりました。

試したこと: ルーターのチャンネルだけを変える

理由2を確かめるために、同じ場所、同じルーターで、5 GHz のチャンネルだけを変えて、時計(充電中)が戻るかを見ました。電波は強いまま(-30 dBm 前後)です。

AP のチャンネル 画面 再接続
いつものチャンネル(124) オフ 5回中5回(71〜180秒)
初めてのチャンネル(104・108・116) オフ 3回中0回(7分待っても)
初めてのチャンネル(112) オン 1回中1回(75秒)

戻らなかった3回は、ルーターのログにも接続の試みが1回もありませんでした。時計がその AP を見つけられていない、ということです。画面をつけると、すぐに1回、そのあと20秒・40秒・80秒…と間隔をあけてフルスキャンが走るので、初めてのチャンネルでも75秒で戻りました。

自分の端末で確かめる

# しきい値
adb shell dumpsys wifi | grep ScoringParams

# 今の RSSI とチャンネル
adb shell cmd wifi status | grep -oE 'RSSI: -?[0-9]+|Frequency: [0-9]+MHz'

# 画面オフで探しているチャンネル
adb logcat -s wificond | grep 'Pno scan'

どうするか

電波の弱い場所では、OS の自動再接続には頼れません。

  • AP を近くに置き、5 GHz の電波が -77 dBm を十分に上回るようにする(理由1)
  • AP のチャンネルを DFS 以外に固定する(理由2)。DFS チャンネルは、レーダーを検知すると AP がチャンネルを移すことがあります

理由が2つあるので、片方だけでは足りません。

設定画面から手動で Wi-Fi を選んだときは、この -77 dBm の基準は使われません。ただ、同じ接続をアプリから行う API(WifiManager.connect)はシステム用です。古い enableNetwork も、Android 10 以降を対象にしたアプリからは使えません。

アプリから WifiNetworkSpecifier で接続をリクエストする方法にも、-77 dBm の基準はありません。ただし、つながるのは基本的にローカル通信用のネットワークで、インターネットには使えません。最初に時計で承認する操作も要ります。手元の実機では承認しなかったので、リクエストのたびに確認の画面が出るだけでした。承認は記憶されるので次からは確認なしでつながるはずですが、そこはまだ試していません。電波の弱い端末は、AP 側で接続を断られることもあります。

参考

AOSP は android16-qpr2-release(android-16.0.0_r4)で確認しました。

この記事をシェア

2020-2026
弊社では、一緒に会社を面白くしてくれる仲間を募集しています。
お気軽にお問い合わせください!
P.S. よろしければこちらもどうぞ
新明工業クラシックカーレストア blog — クラシックカーのレストアのお仕事の一部を公開しています。
新明工業コンベア blog — コンベアに関する技術情報を発信しています。