19

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

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

4

2 に答える 2

13

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

WifiManager.getConnectionInfo().getLinkSpeed()

ウィキペディアの 802.11 プロトコル速度表では、802.11b、802.11n、 802.11agのいずれであるかがわかります。
802.11nおよび802.11acの完全なリンク速度表

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

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

オーバーラップする速度で 802.11n と 802.11ac を区別する方法はないと思います。

于 2014-01-07T11:09:05.173 に答える
2

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

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

自分でプロトコルを決定したい場合は、リンク速度だけでなく、周波数、変調、および帯域幅も理解する必要があります。

TL;DR

root化された電話で作業していて、ハードウェア仕様に直接アクセスできない限り、おそらく不可能です.

于 2015-05-14T20:28:07.237 に答える