web-dev-qa-db-ja.com

プログラムでWi-Fiプロトコル(802.11a / b / g / n)を取得する

WifiManagerを介して、私のAndroidアプリはWi-Fiに関する多くの詳細を取得できます。しかし、a/b/g/nのようなプロトコルタイプを取得できません。それを行うためのクライアント要件があります。 。

誰かがそれを達成する方法を知っていますか? (adbを使用するオプションはありません)。プログラムで行う必要があります。デバイスとルーターは、接続する前にすでにプロトコルをネゴシエートしていると強く信じています。そのため、情報はデバイスにあります。質問は、どうやってそれを取得するのですか?

18
Jailbroken

リンク速度からプロトコルを部分的に推測できます

WifiManager.getConnectionInfo().getLinkSpeed()

Wikipedia 802.11プロトコル速度 テーブルにより、802.11b、802.11n、802.11agのいずれであるかがわかります。
802.11n および 802.11ac フルリンク速度テーブル

プロトコル802.11aと802.11gのリンク速度は同じであり、スキャン結果で使用される周波数(5GHzまたは2.4GHz)によってそれらを区別できます。

プロトコルは接続中に変更される可能性があり、クライアントとアクセスポイントはプロトコルと速度をネゴシエートしますが、特定の速度ではなくリストに同意することに注意してください。

802.11nと802.11acの速度の重複を区別する方法はないと思います。

10
Ofir Luzon

私はこれがきれいな方法で得ることが可能であるとは思わない。プロトコル(a、b、g、nなど)は、実際にはネットワーク内のMACおよび物理層を人間が抽象化したものです。これらは、デバイスとネットワークデバイスの両方について、特定のハードウェア仕様を満たしている場合に認識可能な文字として定義されます。

少し掘り下げてみると、 Windows Phoneはこの情報を表示できます のようです。 Windowsでプロトコルを決定する方法を掘り下げてみると、 デスクトップの説明列挙型を介したVisual C++の実装 に出くわしました。公式のWindowsドキュメントでさえ、ベンダー提供のデータと列挙値に依存しているようです。そのため、 Android API で公開される可能性のあるものを超えてハードウェア仕様を決定する必要があると私は信じています。

プロトコルを自分で決定する場合は、リンク速度と 周波数、変調、帯域幅 を理解する必要があります。

TL; DR

あなたが根ざした電話で働いていて、ハードウェア仕様に直接アクセスできない限り、おそらく不可能です。

2
Adam Link